Я уже несколько дней пытаюсь преобразовать огромный объем данных (около 900 МБ) в звуковой формат файла. Мне дали файл .dat, содержащий 900 миллионов семплов с плавающей точкой (по одному на строку), представляющих 90 секунд музыки на частоте 10 МГц.
Я уменьшил частоту до 40 кГц, но теперь я не знаю, как я мог слушать звук, скрытый в этих байтах. Я пишу программу на C ++ в среде Linux, но если кто-нибудь знает, как выполнить эту задачу, используя Matlab, Octave, Python, Audacity, MPlayer или любой другой инструмент, пожалуйста, откликнитесь и высказайтесь 🙂 Вклады в любом количестве очень ценятся ,
head -n 5 ~ / input.dat -2,4167 -7.5322e-016 -0,2283 0,13581 -0,51926
Настройте частоту дискретизации на 44100 Гц (или 48000, 22050, 11025 или 8000 Гц)
Преобразуйте аудиосэмплы в 16-разрядные целые числа со знаком (от -32768 до +32767).
Следуйте инструкциям по синтезу файлов WAV здесь:
Синтез файлов WAV с нуля — C
формат файла WAV довольно простой.
Вам просто нужно записать 44-байтовый блок заголовка, определенный в этой ссылке, после чего ваши данные преобразуются в целые числа.
Если у вас есть последовательность байтов и вы хотите преобразовать ее в аудио, все, что вам нужно сделать, это написать заголовок. Поскольку вы упомянули, что вы можете использовать MatLAB
, Я бы посоветовал wavwrite
команда. Это просто, проверено и отлично подходит для прототипирования. Вот ссылка на документацию:
http://www.mathworks.in/help/matlab/ref/wavwrite.html
Вот некоторые шаги, которые вам, возможно, придется предпринять, если вы используете wavwrite
,
— Поскольку ваши входные данные с плавающей запятой, масштабируйте данные в вашем файле в пределах диапазона [-1, 1].
— Как только данные масштабируются, подключите и вызовите вызов функции.
— Воспроизвести файл WAV, используя wavplay
команда.
WAV допускает выборку данных с плавающей точкой и широкий диапазон частот дискретизации (от 1 Гц до 4,2 ГГц с шагом 1 Гц, если память служит).
Вам не нужно беспокоиться о преобразовании в целочисленные значения. Просто установите соответствующий заголовок WAV-файла и запишите 32-разрядные числа с плавающей точкой в виде двоичных данных в разделе данных.
С точки зрения хранения, частота дискретизации 10 МГц не является проблемой для файла WAV. Воспроизведение, однако, потребует преобразования в то, что может обрабатывать аппаратное обеспечение. Верхний предел в эти дни обычно составляет 96 или 192 кГц.