Я использую NAudio для разделения Wav-файла на несколько частей с равными интервалами. Я использую версию кода, доступную на сайте Sound Code Марка Хита:
public static void TrimWavFile(string inPath, string outPath, TimeSpan cutFromStart, TimeSpan cutFromEnd)
{
using (WaveFileReader reader = new WaveFileReader(inPath))
{
using (WaveFileWriter writer = new WaveFileWriter(outPath, reader.WaveFormat))
{
//int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;
float bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000f;
int startPos = (int)cutFromStart.TotalMilliseconds * (int)bytesPerMillisecond;
startPos = startPos - startPos % reader.WaveFormat.BlockAlign;
int endBytes = (int)cutFromEnd.TotalMilliseconds * (int)bytesPerMillisecond;
endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign;
int endPos = (int)reader.Length - endBytes;
TrimWavFile(reader, writer, startPos, endPos);
}
}
}
private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
{
reader.Position = startPos;
byte[] buffer = new byte[reader.WaveFormat.BlockAlign * 100];
while (reader.Position < endPos)
{
int bytesRequired = (int)(endPos - reader.Position);
if (bytesRequired > 0)
{
int bytesToRead = Math.Min(bytesRequired, buffer.Length);
int bytesRead = reader.Read(buffer, 0, bytesToRead);
if (bytesRead > 0)
{
writer.Write(buffer, 0, bytesRead);
}
}
}
}
Это разделение файла Wav, но каждая часть на 1 секунду короче указанного интервала. Я не знаю, проблема ли это в коде или в самой библиотеке. Кто-нибудь сталкивался с той же проблемой? Если да, смог ли кто-нибудь решить эту проблему?
Изменить
Это то, что я отправляю в функцию:
TimeSpan cutFromStart = new TimeSpan(0, 0, 0);
TimeSpan cutFromEnd = new TimeSpan(0, 0, 0);
cutFromEnd = totalTime.Subtract(interval);
for (i = 0; i < numberOfParts; i++)
{
outPath = inpath + prefix + (i + 1).ToString() + ".wav";
TrimWavFile(inPath, outPath, cutFromStart, cutFromEnd);
cutFromStart = cutFromStart.Add(interval);
cutFromEnd = cutFromEnd.Subtract(interval);
}
Подробнее здесь: https://stackoverflow.com/questions/488 ... -each-part
Разделение Wav-файла с помощью NAudio удаляет 1 секунду из каждой части. ⇐ C#
Место общения программистов C#
1715291557
Anonymous
Я использую NAudio для разделения Wav-файла на несколько частей с равными интервалами. Я использую версию кода, доступную на сайте Sound Code Марка Хита:
public static void TrimWavFile(string inPath, string outPath, TimeSpan cutFromStart, TimeSpan cutFromEnd)
{
using (WaveFileReader reader = new WaveFileReader(inPath))
{
using (WaveFileWriter writer = new WaveFileWriter(outPath, reader.WaveFormat))
{
//int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;
float bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000f;
int startPos = (int)cutFromStart.TotalMilliseconds * (int)bytesPerMillisecond;
startPos = startPos - startPos % reader.WaveFormat.BlockAlign;
int endBytes = (int)cutFromEnd.TotalMilliseconds * (int)bytesPerMillisecond;
endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign;
int endPos = (int)reader.Length - endBytes;
TrimWavFile(reader, writer, startPos, endPos);
}
}
}
private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
{
reader.Position = startPos;
byte[] buffer = new byte[reader.WaveFormat.BlockAlign * 100];
while (reader.Position < endPos)
{
int bytesRequired = (int)(endPos - reader.Position);
if (bytesRequired > 0)
{
int bytesToRead = Math.Min(bytesRequired, buffer.Length);
int bytesRead = reader.Read(buffer, 0, bytesToRead);
if (bytesRead > 0)
{
writer.Write(buffer, 0, bytesRead);
}
}
}
}
Это разделение файла Wav, но каждая часть на 1 секунду короче указанного интервала. Я не знаю, проблема ли это в коде или в самой библиотеке. Кто-нибудь сталкивался с той же проблемой? Если да, смог ли кто-нибудь решить эту проблему?
[b]Изменить[/b]
Это то, что я отправляю в функцию:
TimeSpan cutFromStart = new TimeSpan(0, 0, 0);
TimeSpan cutFromEnd = new TimeSpan(0, 0, 0);
cutFromEnd = totalTime.Subtract(interval);
for (i = 0; i < numberOfParts; i++)
{
outPath = inpath + prefix + (i + 1).ToString() + ".wav";
TrimWavFile(inPath, outPath, cutFromStart, cutFromEnd);
cutFromStart = cutFromStart.Add(interval);
cutFromEnd = cutFromEnd.Subtract(interval);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/48827119/splitting-a-wav-file-using-naudio-removes-1-second-from-each-part[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия