Как играть аудио от потока в реальном времени

  • Модульный тест : автоматический тест для тестирования внутренних работ класса. Это должен быть автономный тест, который не связан с другими ресурсами.
  • Интеграционный тест : автоматический тест, который сделан на среде, настолько подобной модульным тестам, но с внешними ресурсами (дб, доступ к диску)
  • Регрессионный тест : после реализования новых опций или исправлений ошибок, Вы пересценарии тестирования, которые работали в прошлом. Здесь Вы покрываете возможность, в которой Ваши новые возможности повреждают существующие функции.
  • Испытание с помощью дыма : первые тесты, на которых могут завершить тестеры, продолжат ли они тестировать.
6
задан hossein 19 August 2009 в 20:48
поделиться

2 ответа

Если вы ищете способ воспроизведения звука через определенный поток, рассматривали ли вы NAudio http://naudio.codeplex.com/ ?

Вы может определить поток либо из файла, либо из другого места (например, из памяти), а затем заполнить поток данными, которые вы хотите воспроизвести. Пока вы можете продолжать предоставлять аудиоданные в поток до того, как указатель чтения достигнет конца буфера, вы не услышите эти артефакты в сгенерированном аудио.

Кстати, я полагаю, вы знаете, что Managed Direct X библиотеки для .Net больше не разрабатываются и фактически являются тупиком для такого рода разработки аудио?

4
ответ дан 17 December 2019 в 04:50
поделиться

В этом коде есть несколько ошибок. Я предполагаю, что когда вы запускаете этот код, вы слышите щелчки или хлопки каждые 100 мс. Это из-за вызова Thread.Sleep (100) внутри цикла while (true). По сути, ваше приложение ожидает 100 мс (плюс-минус небольшое количество времени), затем вызывает Play (), который выполняет небольшую обработку, а затем ставит массив в очередь для воспроизведения. В результате существует небольшой промежуток времени между воспроизведением каждого массива 100 мс, который вызывает щелчки.

Однако, если вы просто закомментировали строку Thread.Sleep (100), ваше приложение перейдет в бесконечный цикл, в котором он продолжает ставить в очередь массив 100 мс после массива 100 мс, пока у вас не закончится память. Но, по крайней мере, при воспроизведении не было бы артефактов каждые 100 мс.

Если вы измените строку на Thread.Sleep (80), это будет работать немного лучше в том смысле, что вам потребуется больше времени, чтобы исчерпать память, но это все равно произойдет, потому что вы все равно будете выгружать буферы в систему воспроизведения звука быстрее, чем система может их воспроизвести.

Кроме того, даже если вы избавитесь от щелчков каждые 100 мс, вы все равно ничего не услышите из динамиков, потому что ваш код устанавливает для каждого семпла значение 1000. Вы услышите что-нибудь только в том случае, если измените выборочные значения с течением времени. Между прочим, единственная причина, по которой вы вообще слышите щелчки, заключается в том, что это значение выборки установлено на 1000, и в течение этих небольших интервалов времени между фрагментами значение воспроизведения возвращается к 0. Если вы установите каждое значение выборки на 0, вы никогда не сможете слышать хоть что-нибудь.

Я мог бы вам помочь с этим, но я ' Мне нужно лучше понимать, что вы пытаетесь сделать. Вы пытаетесь воспроизвести непрерывный тон на определенной частоте?

1
ответ дан 17 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: