Объединение волновых файлов с интервалом в 5 секунд

У меня есть серия волновых файлов с отдельными словами, каждый из которых длится около 1 секунды. Я хочу использовать С# для объединения их в один большой файл с интервалом ровно в пять секунд. Это избавит меня от необходимости помещать большой файл в звуковой редактор и записывать время начала для каждого слова.

Я знаю, как объединять файлы с помощью NAudio и WaveFileWriter.write. Есть ли способ либо вставить тишину на определенный период времени, либо фактически добавить один файл в определенный момент в файле? Я понимаю, что может возникнуть ситуация, когда файл, в который я пишу, имеет длину 11 секунд, а следующий файл я хочу записать через 15 секунд.

Я был бы готов сначала конвертировать в mp3, если бы это облегчило задачу. Фактически, большой волновой файл в конечном итоге будет преобразован в mp3. Я также открыт для других инструментов, если это будет иметь больше смысла.

Большое спасибо за вашу помощь,

Джон


person Jonathan Rachlin    schedule 05.11.2011    source источник
comment
Большое спасибо за ваши комментарии. Я последовал второму предложению @Mithon, создав пятисекундную тишину для каждого звука и перезаписав его звуком, а затем записав файл. Отдельные файлы работали отлично, но когда я попытался объединить их, я получил сообщение об ошибке, в котором говорилось, что новый файл имеет несовместимый звуковой формат. Итак, чтобы сэкономить время, я использовал GoldView и объединил 5-секундные файлы в один большой файл, и это было идеально. Я не знаю, почему произошла ошибка, так как я установил для большого файла тот же формат, что и файлы, которые нужно объединить.   -  person Jonathan Rachlin    schedule 06.11.2011


Ответы (2)


При использовании фреймворка NAudio вы можете получить доступ к считывателю, чтобы выяснить, сколько байтов тишины вам нужно записать.

int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;

Затем вы можете записать любое количество байтов тишины, необходимое для достижения следующего кратного 5 секундам. Я предполагаю, что вы можете написать все нули, хотя это должно привести к полному отсутствию звука, что может показаться искусственным.

Из-за этого лучшим решением может быть создание 5-секундной волны тишины и копирование ее части. Обратитесь к этому хорошему примеру, чтобы узнать, как написать определенную длину волны:

http://mark-dot-net.blogspot.com/2009/09/trimming-wav-file-using-naudio.html

person Gaute Løken    schedule 05.11.2011

Я могу не правильно понять вопрос, но если я это сделаю, это может сработать для вас. Похоже, вы должны иметь возможность записывать стандартный «тихий файл» любой длины (1 сек, 1/2 сек) с помощью какого-нибудь звукозаписывающего устройства. Затем вы можете использовать NAudio, чтобы объединить столько копий, сколько вам нужно, чтобы обеспечить необходимое количество тишины между словами. Другими словами, скажем, у вас полсекунды тишины. Вы можете создать word1.wav + тишину.wav + тишину.wav + word2.wav для полной секунды тишины между word1 и word2. Длина файла без вывода сообщений будет зависеть от необходимой точности между словами, и вам просто нужно будет развернуть этот файл без вывода сообщений в вашем приложении.

person A. Wilson    schedule 05.11.2011