Я пытаюсь использовать libsndfile для записи многоканального wav, который может быть прочитан MATLAB 2010+.Написание многоканального звука для MATLAB с libsndfile
следующий код записывает 4-канальный чередующийся wav. все образцы на канале 1 должны быть равны 0,1, на канале 2 - 0,2, на канале 3 ... и т.д.
Каждый канал имеет длину 44100.
Я перетаскиваю файл волны в рабочее пространство MATLAB и, к сожалению, MATLAB продолжает возвращать «Файл содержит неинтерпретируемые данные».
Возможно также стоит отметить, что когда все образцы установлены в 0.0, MATLAB успешно читает файл, хотя и очень медленно.
Я успешно использовал libsndfile для чтения многоканальных данных, написанных MATLAB's wavwrite.m, поэтому библиотека правильно настроена, я верю.
Audacity может прочитать полученный файл по приведенному ниже коду.
VS 2012 64 битный компилятор, Win7 64bit, MATLAB 2015a
исх: код был адаптирован из http://www.labbookpages.co.uk/audio/wavFiles.html
Любые предложения, я полагаю, я делаю простую ошибку здесь?
Благодаря
#include <sndfile.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
// Create interleaved audio data
int numFrames_out = 44100;
int channels = 4;
float *int_y;
int_y = (float*)malloc(channels*numFrames_out*sizeof(float));
long q=0;
for (long i = 0; i<numFrames_out; i++)
{
for (int j = 0; j<channels; j++)
{
int_y[q+j] = ((float)(j+1))/10.0;
}
q+=channels;
}
// Set multichannel file settings
SF_INFO info;
info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_32;
info.channels = channels;
info.samplerate = 44100;
// Open sound file for writing
char out_filename[] = "out_audio.wav";
SNDFILE *sndFile = sf_open(out_filename, SFM_WRITE, &info);
if (sndFile == NULL)
{
fprintf(stderr, "Error opening sound file '%s': %s\n", out_filename, sf_strerror(sndFile));
return -1;
}
// Write frames
long writtenFrames = sf_writef_float(sndFile, int_y, numFrames_out);
// Check correct number of frames saved
if (writtenFrames != numFrames_out) {
fprintf(stderr, "Did not write enough frames for source\n");
sf_close(sndFile);
free(int_y);
return -1;
}
sf_close (sndFile);
}
Я нашел временную работу - Audacity может прочитать wav-файл, созданный с использованием вышеприведенного кода, и поэтому, если я включу экспорт в многоканальную wav-функцию Audacity, а затем импортирую этот файл в MATLAB, он работает. Это также подтверждает, что MATLAB может читать многоканальные wav (если это было сомнительно), и проблема как-то связана с форматированием. – AlexS
Мне жаль, что я не знаю почему кто-то -1 без объяснения причин – AlexS