2012-03-13 1 views
0

Я хотел бы использовать NAudio для чтения, изменения и записи волн. Есть ли прямой доступ для получения и установки отдельных образцов волновых файлов в этой библиотеке. Например, я хотел бы открыть wav-файл, тогда я хотел бы получить значения пятых образцов на всех каналах в виде поплавков. Я также хотел бы знать, что есть способ изменить эти 5-ые образцы, и после этого, как я могу сохранить этот измененный результат. Не могли бы вы помочь и показать мне, как это можно сделать. До сих пор я не нашел никакой документации, есть ли? Спасибо.NAudio - индивидуальные образцы доступа и модификации

+0

ИМХО, NAudio является излишеством для такого рода, что вы-которые-делают. Возможно, это: http://www.codeproject.com/Articles/35725/C-WAV-file-class-audio-mixing-and-some-light-audio –

+0

Я заметил этот конкретный проект, но он больше не поддерживает чем моно и стерео wav-s. Не могли бы вы показать мне, как добраться до этих образцов, если у вас есть это знание? –

+0

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

ответ

3

Да, NAudio предназначен для доступа к отдельным образцам аудио. Тем не менее, существует множество различных аудиоформатов (битовые глубины, типы сжатия и т. Д.), Поэтому нет универсального способа сделать это. Класс WaveFileReader даст вам доступ к необработанным байтовым данным. Затем вы можете преобразовать каждую пару байтов в 16-битные сэмплы самостоятельно или использовать некоторые из вспомогательных классов NAudio, чтобы вы могли более легко работать с 16-битным звуком (при условии, что ваш звук 16 бит). Затем вы используете класс WaveFileWriter, чтобы записать измененный звук обратно на диск.

В качестве альтернативы, если вы хотите иметь дело с аудио как поплавками, вы можете использовать новый класс AudioFileReader, реализующий ISampleProvider, что позволяет очень легко исследовать значение каждого образца в качестве поплавка, когда оно приходит через метод Read. Вы бы создать свой собственный ISampleProvider, чей метод чтения считывает данные из источника AudioFileReader и анализирует и изменяет звук:

var reader = new AudioFileReader(); 
var mySampleProvider = new MySampleProvider(reader); 
WaveFileWriter.CreateWaveFile(mySampleProvider, "example.wav"); 

... 
class MySampleProvider: ISampleProvider 
{ 
    private readonly ISampleProvider source; 

    public MySampleProvider(ISampleProvider source) 
    { 
     this.source = source; 
    } 

    public int Read(float[] buffer, int offset, int count) 
    { 
     int samplesRead = source.Read(buffer, offset, count); 
     // TODO: examine and optionally change the contents of buffer 
     return samplesRead; 
    } 

    public WaveFormat WaveFormat 
    { 
     get { return source.WaveFormat; } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^