Я пытаюсь вывести аудиосэмплы, и делаю это с помощью cswavplay из http://www.codeproject.com/KB/audio-video/cswavplay.aspx, который, в свою очередь, использует DllImports
из winmm.dll.
Я получил его для воспроизведения, используя8-битные сэмплы, однако, когда я пытаюсь передать 16-битные сэмплы, он терпит неудачу.Я копался в коде как можно лучше и понимаю это так:
Я получаю указатель на буфер для заполнения каждый раз, когда cswavplay заканчивает воспроизведение последнего буфера.Он работает за одну итерацию, он воспроизводит один буфер, иногда ... Я получаю всевозможные забавные исключения, AccessViolationException только сейчас, например, когда я пытался использовать размер буфера 44100, чтобы более четко слышать, сколько проигрывается.Но когда я размещаю точки останова в разных местах внутри класса WaveOut (часть cswavplay), кажется, что ни один из используемых им объектов, таких как буферы и экземпляр AutoResetEvent, не остается живым во второй итерации.Я думаю, что эти проблемы связаны с многопоточностью или сборкой мусора.Исключения кажутся довольно случайными, и я слишком неопытен, чтобы полностью понять, что происходит.
Я прошу одно из следующего:
1) Дикие догадки о том, в чем может быть проблема
2) Образованные догадки о том, в чем может быть проблема
3) Указатели на альтернативный способ вывода звука в режиме реального времени с использованиемC #
Я не прошу подробного отслеживания ошибок в программном обеспечении, которое я не писал, так что не против cswavplay ...
В конце дня я мог бы бытьздесь что-то не так, но трудно понять, когда я не получаю соответствующее исключение (по линии BufferAllocationException
или что-то в этом роде) ...
РЕДАКТИРОВАТЬ:
Спасибо за все предложения о других звуковых API.Кажется, все они принимают файл .wav.Прошу прощения за непонятность, я не играю файлы .wav, я синтезирую сэмплы в реальном времени.