#c# #wav #naudio
#c# #wav #naudio
Вопрос:
У меня есть серия волновых файлов с отдельными словами, каждое из которых длится около 1 секунды. Я хочу использовать C # для объединения их в один большой файл с интервалом ровно в пять секунд. Это избавит меня от необходимости пропускать большой файл через звуковой редактор и записывать время начала для каждого слова.
Я знаю, как объединять файлы с помощью NAudio и WaveFileWriter.write. Есть ли способ либо вставить паузу на определенный промежуток времени, либо фактически добавить один файл в определенный момент в файле? Я понимаю, что возникнет ситуация, когда файл, в который я записываю, длится 11 секунд, и я захочу записать следующий файл через 15 секунд.
Я был бы готов сначала конвертировать в mp3, если бы это упростило задачу. Фактически, файл big wave в конечном итоге будет преобразован в mp3. Я также открыт для других инструментов, если это будет иметь больше смысла.
Большое спасибо за вашу помощь,
Джон
Комментарии:
1. Большое спасибо за ваши комментарии. Я последовал второму предложению @Mithon, создав пятисекундное молчание для каждого звука и перезаписав его звуком, а затем записав файл. Отдельные файлы работали отлично, но когда я попытался объединить их, я получил сообщение об ошибке, в котором говорилось, что новый файл был несовместимым форматом звука. Итак, чтобы сэкономить время, я использовал GoldView и пакетно объединил 5-секундные файлы в один большой файл, и это было идеально. Я не знаю, почему произошла ошибка, поскольку я настроил большой файл на использование того же формата, что и файлы, которые будут объединены.
Ответ №1:
При использовании платформы NAudio вы можете получить доступ к программе чтения, чтобы выяснить, сколько байтов тишины вам нужно записать
int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;
Затем вы можете записать любое количество байтов тишины, которое вам нужно, чтобы достичь следующего значения, кратного 5 секундам. Я предполагаю, что вы можете записать все нули, даже если это не должно приводить к отсутствию звука вообще, который может показаться искусственным.
Из-за этого лучшим решением может быть создание 5s wav тишины и копирование в этом разделе. Обратитесь к этому хорошему примеру о том, как записать определенную длину волны:
http://mark-dot-net.blogspot.com/2009/09/trimming-wav-file-using-naudio.html
Ответ №2:
Возможно, я неправильно понял вопрос, но если я это сделаю, это может сработать для вас. Похоже, вы должны иметь возможность записывать стандартный «тихий файл» любой длины, которую вы пожелаете (1 сек, 1/2 сек), используя какой-либо звукозаписывающий аппарат. Затем вы могли бы использовать NAudio для объединения стольких копий, сколько вам нужно, чтобы обеспечить требуемое количество пауз между словами. Другими словами, допустим, у вас есть 1/2 секунды тишины. Вы могли бы создать word1.wav silence.wav silence.wav word2.wav для полной секунды тишины между word1 и word2. Длина автономного файла будет зависеть от того, насколько вам нужна точность между словами, и вам просто нужно будет развернуть этот автономный файл с вашим приложением.