2013-03-14 2 views
4

Мне нужен быстрый метод для хранения всех образцов wav-файла в массиве. В настоящее время я работаю над этой проблемой, играя музыку и сохраняя значения из Провайдера Провайдера, но это не очень элегантно.Хранение wav-файла в массиве

С NAudio Demo У меня есть аудиоплеер класс с помощью этого метода:

private ISampleProvider CreateInputStream(string fileName) 
    { 
     if (fileName.EndsWith(".wav")) 
     { 
      fileStream = OpenWavStream(fileName); 
     } 
      throw new InvalidOperationException("Unsupported extension"); 
     } 
     var inputStream = new SampleChannel(fileStream, true); 
     var sampleStream = new NotifyingSampleProvider(inputStream); 
     SampleRate = sampleStream.WaveFormat.SampleRate; 
     sampleStream.Sample += (s, e) => { aggregator.Add(e.Left); }; // at this point the aggregator gets the current sample value, while playing the wav file 
     return sampleStream; 
    } 

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

+0

Почему это не элегантно? Можете ли вы вставить все, что вы пробовали до сих пор, чтобы дать другим что-то, чтобы помочь вам? –

+0

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

ответ

1

Используйте файл AudioFileReader, чтобы прочитать файл. Это автоматически преобразуется в образцы поплавка IEEE. Затем повторно вызывайте метод Read для чтения блока образцов в массив float [].

+0

Спасибо, я попробую его позже! –

+0

Его работа с AudioFileReader.ReadAsync() и байтовым массивом, но у меня есть проблемы с правильным использованием AudioFileReader.Read() и массива float. Я всегда получаю исключение из диапазона вне диапазона. I.e. Я хочу сохранить первые 1024 значения float в массивах массива float: SampleReader.Read (samples, 0, 1024); Следующим шагом будет: SampleReader.Read (образцы, 1024, 2048); , но этот шаг всегда падает. –

+0

Обычно вы продолжаете звонить (образцы, 0, 1024). –

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