Compare commits
No commits in common. "c502e4b5464ded4ae1dc68ee308a07edbe28ccf0" and "c836357df0eeddf810527113538d55505b8601d2" have entirely different histories.
c502e4b546
...
c836357df0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,2 @@
|
|||||||
build/
|
build/
|
||||||
out/
|
out/
|
||||||
.cache
|
|
||||||
|
|||||||
@ -20,7 +20,6 @@ set(BUILD_EXAMPLE_PROGRAMS OFF CACHE BOOL "")
|
|||||||
set(BUILD_DYNAMIC_LIBS ON CACHE BOOL "" FORCE)
|
set(BUILD_DYNAMIC_LIBS ON CACHE BOOL "" FORCE)
|
||||||
set(BUILD_STATIC_LIBS ON CACHE BOOL "" FORCE)
|
set(BUILD_STATIC_LIBS ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
# libsoundio
|
|
||||||
add_subdirectory("${CMAKE_SOURCE_DIR}/extern/libsoundio")
|
add_subdirectory("${CMAKE_SOURCE_DIR}/extern/libsoundio")
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/extern/libsoundio")
|
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/extern/libsoundio")
|
||||||
|
|
||||||
@ -28,6 +27,3 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
|
|||||||
$<$<CONFIG:Debug>:libsoundio_shared>
|
$<$<CONFIG:Debug>:libsoundio_shared>
|
||||||
$<$<CONFIG:Release>:libsoundio_static>
|
$<$<CONFIG:Release>:libsoundio_static>
|
||||||
)
|
)
|
||||||
|
|
||||||
# math
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE m)
|
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
build/compile_commands.json
|
|
||||||
106
src/main.c
106
src/main.c
@ -1,108 +1,8 @@
|
|||||||
#include <soundio/soundio.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
static const float PI = 3.1415926535f;
|
int
|
||||||
static float seconds_offset = 0.0f;
|
main(int argc, char *argv[]) {
|
||||||
static void write_callback(struct SoundIoOutStream *outstream,
|
printf("Hello, %s\n", argv[0]);
|
||||||
int frame_count_min, int frame_count_max)
|
|
||||||
{
|
|
||||||
const struct SoundIoChannelLayout *layout = &outstream->layout;
|
|
||||||
float float_sample_rate = outstream->sample_rate;
|
|
||||||
float seconds_per_frame = 1.0f / float_sample_rate;
|
|
||||||
struct SoundIoChannelArea *areas;
|
|
||||||
int frames_left = frame_count_max;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
while (frames_left > 0) {
|
|
||||||
int frame_count = frames_left;
|
|
||||||
|
|
||||||
if ((err = soundio_outstream_begin_write(outstream, &areas, &frame_count))) {
|
|
||||||
fprintf(stderr, "%s\n", soundio_strerror(err));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!frame_count)
|
|
||||||
break;
|
|
||||||
|
|
||||||
float pitch = 440.0f;
|
|
||||||
float radians_per_second = pitch * 2.0f * PI;
|
|
||||||
for (int frame = 0; frame < frame_count; frame += 1) {
|
|
||||||
float sample = sin((seconds_offset + frame * seconds_per_frame) * radians_per_second);
|
|
||||||
for (int channel = 0; channel < layout->channel_count; channel += 1) {
|
|
||||||
float *ptr = (float*)(areas[channel].ptr + areas[channel].step * frame);
|
|
||||||
*ptr = sample;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
seconds_offset = fmod(seconds_offset + seconds_per_frame * frame_count, 1.0);
|
|
||||||
|
|
||||||
if ((err = soundio_outstream_end_write(outstream))) {
|
|
||||||
fprintf(stderr, "%s\n", soundio_strerror(err));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
frames_left -= frame_count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
int err;
|
|
||||||
struct SoundIo *soundio = soundio_create();
|
|
||||||
if (!soundio) {
|
|
||||||
fprintf(stderr, "out of memory\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((err = soundio_connect(soundio))) {
|
|
||||||
fprintf(stderr, "error connecting: %s\n", soundio_strerror(err));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
soundio_flush_events(soundio);
|
|
||||||
|
|
||||||
int default_out_device_index = soundio_default_output_device_index(soundio);
|
|
||||||
if (default_out_device_index < 0) {
|
|
||||||
fprintf(stderr, "no output device found\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct SoundIoDevice *device = soundio_get_output_device(soundio, default_out_device_index);
|
|
||||||
if (!device) {
|
|
||||||
fprintf(stderr, "out of memory\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "Output device: %s\n", device->name);
|
|
||||||
|
|
||||||
struct SoundIoOutStream *outstream = soundio_outstream_create(device);
|
|
||||||
if (!outstream) {
|
|
||||||
fprintf(stderr, "out of memory\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
outstream->format = SoundIoFormatFloat32NE;
|
|
||||||
outstream->write_callback = write_callback;
|
|
||||||
|
|
||||||
if ((err = soundio_outstream_open(outstream))) {
|
|
||||||
fprintf(stderr, "unable to open device: %s", soundio_strerror(err));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outstream->layout_error)
|
|
||||||
fprintf(stderr, "unable to set channel layout: %s\n", soundio_strerror(outstream->layout_error));
|
|
||||||
|
|
||||||
if ((err = soundio_outstream_start(outstream))) {
|
|
||||||
fprintf(stderr, "unable to start device: %s\n", soundio_strerror(err));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
soundio_wait_events(soundio);
|
|
||||||
|
|
||||||
soundio_outstream_destroy(outstream);
|
|
||||||
soundio_device_unref(device);
|
|
||||||
soundio_destroy(soundio);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user