Как создать wav файл в c

Обновлено: 02.07.2024

Приветствую! Данная заметка ориентирована на начинающих программистов, самых, что ни на есть новичков. Она о простой библиотеке Audiere. Если вы когда-то хотели вывести звук просто и быстро, то Audiere вам скорее всего понравится!

Для начала расскажу немного о том, что это:

Audiere — это высокоуровневый аудио-API с открытым исходным кодом под лицензией LGPL. Его можно использовать во множестве языков, включая Java, C++, Python, Delphi и др. Разрешается использовать в коммерческих приложениях свободным образом, если исходный код не будет затронут (подробности в документации к библиотеке).

Подготовимся к реализации простейшего примера на C++:

  • Скачиваем библиотеку на оф.сайте (в моём случае — это Win32 Binary Release)
  • Традиционно переносим файл «audiere.lib» в папку «lib» компилятора, а заголовочник «audiere.h» также в папку «include» вашего компилятора

пути к папке компилятора для CodeBlocks «Program Files(x86)/CodeBlocks/MinGW/», для Microsoft Visual Studio - «Program Files(x86)/Microsoft Visual Studio/VC/»
Если ты третий день, как научился выводить «cout<<», то заранее скажу, друг, просто повторяй, что написано внизу, я постараюсь всё объяснить.

Теперь, комментарии чуть более развернутые:


Здесь мы создаем, по концепции библиотеки указатель device (не совсем явный, но всё же указатель). OpenDevice() можно оставить без аргументов, тогда библиотека сама выберет подходящее устройство.

Далее, открываем наш файл в поток:


Открывая наш звук, в OpenSound нужно передать три аргумента:

1. device — устройство куда будет происходить вывод
2. «sound.wav» — наш произвольный звук
3. false или true — хотим мы, чтобы наш звук был загружен в память и воспроизведён(false) или, посредством потока (например, если это большой файл), воспроизводился не загружаясь полностью в память(true). Для саундтреков обязательно «true», иначе всю память займёт звук.


Проигрываем наш звук! Как видно, всё очень просто. Для звуков можно установить громкость:


Можно сделать звук повторяющимся (зацикленным):


Остановить воспроизведение данного потока:


Узнать проигрывается ли данный поток сейчас:


Узнать текущую громкость у данного потока:


Установить панораму звука (слева, по центру, справа):


Установить скорость воспроизведения звука (тональность тоже меняется):

В заголовочном файле «audiere.h» определены ещё некоторые другие функции такие, как «CreateTone();», «CreatePinkNoise()» и прочие, включая MIDI-возможности. Список членов пространства имён «audiere», а заодно и ссылка на онлайн-документацию здесь.

Конечно же, в нашу программу ещё нужно добавить обработку ошибок, тогда исходный код будет выглядеть следующим образом:


А также обработка ошибки открытия файла:

И напоследок, программа по-интереснее: сделаем примитивный музыкальный инструмент!

В этот раз мы будем пользоваться методом «getch()». Его отличие в том, что он работает также, как «getche()», но не отображает введенные символы. Но вдруг у вас получилась интересная мелодия и нужно посмотреть, что вы нажимали?: можно использовать и «getche()», а можно и в массив записывать с «getch()». Я намеренно не усложняю текст для новичков, чтобы не скрывать простоту кода, поэтому проверку на ошибки и всё остальное вы можете дописать сами.

Исходный код музыкального инструмента:


Файлы *.wav для этого проекта можно скачать здесь. Распакуйте их в папку с исходным кодом.

В «conio.h» есть хорошая альтернатива методу «cin>>» — это «getche()». «getche()» не дожидается ввода команды «Enter», а присваивает значение переменной сразу после нажатия клавиши:


Но как видишь ты сможешь нажать на клавишу лишь однажды, поэтому этот метод лучше использовать для массивов в циклах:


" !inputVar[i]=='\r' " — это проверка на нажатие «Enter», если он будет нажат — цикл закончится. '\r' — это признак возврата каретки.

А теперь, почему в коде «getche()» стоит так одиноко и не присваивается никакой переменной: нам это не нужно. Нужно лишь дождаться нажатия любой клавиши, после чего программа завершится.

С помощью «setlocale(0, „Russian“);» устанавливается поддержка вывода русского текста в консоль (но не ввода).

Следующие две строки будут понятнее после более продолжительного знакомства с C++, например, по книге

Поскольку «sound» у нас — это указатель, то методы для него будут выполняться с помощью оператора стрелочки "->", а не точки; как могло бы быть: «sound.play()». Этому, в вышеупомянутой книге, посвящена глава «Указатели».

Комментарий к конструкции «if else»:

Для всех следующих проверок мы использовали «else if», что даёт прирост скорости для программы, потому что после проверки каждого значения и его соответствия нажатой клавишы — остальные опреаторы else if выполнены не будут. Если бы мы записали:

то несмотря, на нажатую, например, клавишу 'q' — все остальные условия всё равно бы проверялись, что в данном случае бессмысленно.

4 ответа

Я пытаюсь извлечь высоту тона каждого кадра wav-файла (музыки). Я использую libsnd для чтения wav-файлов. Я также открыт для использования других библиотек Я провел небольшое исследование и выяснил, что мы можем написать сценарий, используя библиотеку snack для извлечения файлов pitch с помощью.

Обычно subchunk1size wav-файла равен 16. Однако у меня есть несколько wav-файлов с subchunk1size = 18. У меня есть код c++ для чтения wav-файла с subchunk1size = 16. Теперь я хочу прочитать wav-файлы с subchunk1size = 18. Любая помощь будет оценена по достоинству. typedef struct header_file < char.

Основная проблема заключается в:

BinaryWriter.Write(string) записывает строку с префиксом ее длины , чтобы BinaryReader мог прочитать ее обратно. Он не предназначен для использования, как в вашем случае. Вам нужно записать байты напрямую, а не использовать BinaryWriter.Write(string) .

Что вы должны делать:

Преобразуйте строку в байты, а затем запишите байты напрямую.

или сделайте это одной строкой:

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

Что касается endianess, то ссылка, которую вы разместили, указывает, что данные находятся в литтл-эндиане, а BinaryWriter использует литтл-эндианский, так что это не должно быть проблемой.

Самым простым из возможных способов, вы можете просто изменить:

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

Мне не хватает правильных данных WAV, но попробуйте заменить часть вашего кода, в которой вы создаете заголовок, этим кодом (замените соответствующим образом):

Я пытаюсь создать программу, которая использует распознавание голоса и делает файл WAV из распознанного голоса, я использовал этот код : Recognizer.SetInputToWaveFile(@C:\\Program Files\\MyProgram\\Bin\\STWAV\\Speech.wav); но я получаю это исключение каждый раз, когда запускаю распознавание.

Я смотрю на создание WAV file в C и видел пример здесь . Это выглядит хорошо, но я заинтересован в добавлении двух буферов, чтобы сделать аудио стерео (возможность иметь разный звук в каждом ear) . Если я установлю количество каналов равным двум, звук будет воспроизводиться только из левого канала.

@Alvin-wong ответ работает идеально. Просто хотел добавить еще одно предложение, хотя еще несколько строк-это:

Похожие вопросы:

Я пишу WAV-плеер в C с библиотекой SIGIL API и windows.h, я использую GetOpenFileName из библиотеки windows.h, чтобы открыть файл, и мне нужен способ программы read продолжительность файла WAV, есть.

Я пытаюсь извлечь высоту тона каждого кадра wav-файла (музыки). Я использую libsnd для чтения wav-файлов. Я также открыт для использования других библиотек Я провел небольшое исследование и выяснил.

Обычно subchunk1size wav-файла равен 16. Однако у меня есть несколько wav-файлов с subchunk1size = 18. У меня есть код c++ для чтения wav-файла с subchunk1size = 16. Теперь я хочу прочитать.

Я пытаюсь создать программу, которая использует распознавание голоса и делает файл WAV из распознанного голоса, я использовал этот код : Recognizer.SetInputToWaveFile(@C:\\Program.

Я смотрю на создание WAV file в C и видел пример здесь . Это выглядит хорошо, но я заинтересован в добавлении двух буферов, чтобы сделать аудио стерео (возможность иметь разный звук в каждом ear) .

Я создаю приложение для фортепиано, где каждая клавиша воспроизводит другой файл .wav . Например, если нажата нота C , то воспроизводится нота C.wav . До сих пор мне удалось воспроизвести только.

Я довольно новичок в python и FFT, поэтому заранее приношу извинения - я пытаюсь взять файл WAV и воссоздать его только с определенными частотами (отфильтровать нежелательные частоты) Я могу.

Представляем вашему вниманию статью с подробным разбором заголовка WAV-файла и его структуры.

Теория

Итак, рассмотрим самый обычный WAV файл (Windows PCM). Он представляет собой две, четко делящиеся, области. Одна из них — заголовок файла, другая — область данных. В заголовке файла хранится информация о:

  • Размере файла.
  • Количестве каналов.
  • Частоте дискретизации.
  • Количестве бит в сэмпле (эту величину ещё называют глубиной звучания).

Но для большего понимания смысла величин в заголовке следует ещё рассказать об области данных и оцифровке звука. Звук состоит из колебаний, которые при оцифровке приобретают ступенчатый вид. Этот вид обусловлен тем, что компьютер может воспроизводить в любой короткий промежуток времени звук определенной амплитуды (громкости) и этот короткий момент далеко не бесконечно короткий. Продолжительность этого промежутка и определяет частота дискретизации. Например, у нас файл с частотой дискретизации 44.1 kHz, это значит, что тот короткий промежуток времени равен 1/44100 секунды (следует из размерности величины Гц = 1/с). Современные звуковые карты поддерживают частоту дискретизации до 192 kHz. Так, со временем разобрались.

Амплитуда и сэмплы

Теперь, что касается амплитуды (громкости звука в коротком промежутке времени). Амплитуда выражается числом, которое занимает в файле 8, 16, 24, 32 бита (теоретически можно и больше). От точности амплитуды, я бы сказал, зависит точность звука. Как известно, 8 бит = 1 байту, следовательно, одно значение амплитуды в какой-то короткий промежуток времени в файле занимает 1, 2, 3, 4 байта соответственно. Таким образом, чем больше число занимает места в файле, тем шире возможный диапазон значений для этого числа, а значит и больше точность амплитуды.

Для PCM-файлов точность (или разрядность) может быть следующей:

  • 1 байт / 8 бит — -128…127
  • 2 байта / 16 бит — -32 760…32 760
  • 3 байта / 24 бита — -1…1 (с плавающей точкой)
  • 4 байта / 32 бита — -1…1 (с плавающей точкой)

Но список возможных разрядностей на самом деле весьма шире, здесь представлены лишь наиболее популярные.

Совокупность амплитуды и короткого промежутка времени носит название сэмпл.

Заголовок

Итак, давайте рассмотрим первую часть WAV-файла подробнее. Следующая таблица наглядно показывает структуру заголовка:

МестоположениеПолеОписание
0…3 (4 байта) chunkId Содержит символы «RIFF» в ASCII кодировке 0x52494646 . Является началом RIFF-цепочки.
4…7 (4 байта) chunkSize Это оставшийся размер цепочки, начиная с этой позиции. Иначе говоря, это размер файла минус 8, то есть, исключены поля chunkId и chunkSize.
8…11 (4 байта) format Содержит символы «WAVE» 0x57415645
12…15 (4 байта) subchunk1Id Содержит символы "fmt " 0x666d7420
16…19 (4 байта) subchunk1Size 16 для формата PCM. Это оставшийся размер подцепочки, начиная с этой позиции.
20…21 (2 байта) audioFormat Аудио формат, список допустипых форматов. Для PCM = 1 (то есть, Линейное квантование). Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
22…23 (2 байта) numChannels Количество каналов. Моно = 1, Стерео = 2 и т.д.
24…27 (4 байта) sampleRate Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
28…31 (4 байта) byteRate Количество байт, переданных за секунду воспроизведения.
32…33 (2 байта) blockAlign Количество байт для одного сэмпла, включая все каналы.
34…35 (2 байта) bitsPerSample Количество бит в сэмпле. Так называемая «глубина» или точность звучания. 8 бит, 16 бит и т.д.
36…39 (4 байта) subchunk2Id Содержит символы «data» 0x64617461
40…43 (4 байта) subchunk2Size Количество байт в области данных.
44… data Непосредственно WAV-данные.

Вот и весь заголовок, длина которого составляет 44 байта.

Подводные камни

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

В chunkSize лежит заведомо слишком большое значение. Такое происходит, когда вы пытаетесь читать данные в режиме стриминга. Например, декодер LAME при выводе результата декодирования в STDOUT в этом поле возвращает значение 0x7FFFFFFF + 44 - 8 , а в subchunk2Size — 0x7FFFFFFF (что равно максимальному значению 32-разрядного знакового целочисленного значения). Это объясняется тем, что декодер в таком режиме выдаёт результат не целиком, а небольшими наборами данных и не может заранее определить итоговый размер данных.

Подцепочек может быть больше, чем две, например, при попытке декодировать аудио универсальным декодером ffmpeg 4.1.3 ffmpeg -i example.mp3 -f wav example.wav в декодированном файле помимо рассмотренных подцепочек fmt и data будет содержаться ещё одна LIST перед областью данных. Таким образом, когда вам понадобится добраться до данных, вам потребуется пропустить ненужные подцепочки, пока не встретится data . Это будет сделать не слишком сложно, так как можно читать ID подцепочки и её размер, и если она не data , то пропускать данные, основываясь на её размере.

Блок данных

В моно варианте значения амплитуды расположены последовательно. В стерео же, например, сначала идет значение амплитуды для левого канала, затем для правого, затем снова для левого и так далее.

Заметка о типах данных

WAV, являясь одним из самых популярных форматов несжатого звука, обладает множеством достоинств. Этот аудиоформат можно редактировать очень легко, особенно если они занимаются редактированием подкастов или пост-аудиозаписью. Более того, он предлагает высочайшее качество звука и может быть включен в ваши аудиозаписи. Несмотря на это, у этого аудиоформата есть и недостатки. Преобразование файла WAV из несжатого файла может не позволить восстановить или восстановить каждый бит данных из исходного источника. Следовательно, многие пользователи хотят знать как создать файл WAV. При этом давайте рассмотрим некоторые из лучших способов выполнить эту задачу.

Сделать файл WAV

Часть 1. Как создать файл WAV в Windows

1. Диктофон под Windows

Для пользователей Windows XP и более ранних версий лучший способ создания WAV - использование программы звукозаписи. Это позволяет записывать аудиоклипы и воспроизводить аудио с поддержкой файлов WAV. Кроме того, он также оснащен основными элементами управления воспроизведением, включая ускоренную перемотку вперед, назад, воспроизведение, остановку и запись. Чтобы испытать этот инструмент, вот как создать файлы WAV для Windows XP или более ранних версий ОС.

Шаг 1. Откройте приложение «Звукозапись» на вашем компьютере с Windows.

Шаг 2. Щелкните красный Запись на панели инструментов, чтобы начать запись. К тому времени вы можете начать говорить, используя микрофон, подключенный к компьютеру. Ударять Стоп как только вы закончите.

Диктофон Начать запись

Шаг 3. Чтобы проверить аудиозапись, воспроизведите только что записанный звук. Далее перейдите к Файл> Сохранить как .. затем задайте имя для вашего аудиофайла WAV. Наконец, нажмите кнопку «Сохранить», чтобы подтвердить изменения.

Диктофон Сохранить запись

2. Диктофон Windows

Еще один инструмент, который поможет вам записывать через встроенное приложение для более поздних версий Windows, - это Windows Voice Recorder. После записи вы можете обрезать звук, чтобы удалить ненужные части и поделиться им с другими. Точно так же, если вы хотите узнать, как создать файл WAV в Windows 10, этот инструмент должен вам пригодиться. Однако для этого вам понадобится другая программа для преобразования аудиозаписи в файл WAV, поскольку по умолчанию файл сохраняется как M4R. Чтобы записать с помощью этого инструмента, вы можете обратиться к руководству ниже.

Шаг 1. Нажмите значок Windows на вашем ПК в нижнем левом углу панели задач и введите Диктофон. Вы также можете нажать кнопку Окна клавишу на клавиатуре вашего компьютера.

Шаг 2. Убедитесь, что у вас есть микрофон. Затем нажмите синий Запись кнопку и начните говорить.

Шаг 3. Вы можете приостановить запись или нажать Стоп когда вы закончите. После этого вы можете преобразовать запись в файл WAV. Взгляните на подробное руководство в части 3, чтобы узнать о всестороннем процессе преобразования.

Воспроизведение записи диктофона

Часть 2. Запись аудио и создание файлов WAV

Одно из лучших приложений для записи звука, которое вы также можете использовать, - это Vidmore Screen Recorder. Это поможет вам записывать не только экранную активность вашего компьютера, но и звук системы по своему усмотрению. Более того, вы можете записывать и системный звук, и микрофон одновременно, или записывать только системный звук или сам микрофон. Кроме того, это приложение совместимо с компьютерами Windows и Mac. Теперь вот как создать файл WAV в Windows 10 или Mac с помощью средства записи экрана от Vidmore.

Шаг 1. Установите программное обеспечение.

Для начала вам необходимо скачать и установить программное обеспечение на свой компьютер. После установки загрузите программу.

Шаг 2. Откройте меню Audio Recorder.

В главном интерфейсе инструмента есть четыре основных параметра. Оттуда выберите Диктофон меню.

Видмор-старший Выбрать

Шаг 3. Запишите аудио

Чтобы создать файлы WAV, вы можете включить и микрофон, и системный звук, а затем нажать REC кнопка. У вас будет 3 секунды на подготовку, после чего вы сможете начать запись. Просто нажмите Стоп, как только закончите.

Vidmore Sr Запись аудио

Шаг 4. Сохраните запись.

Проверьте запись, послушав воспроизведение звука, затем нажмите кнопку Сохранить кнопку, чтобы подтвердить файл. После выполнения всех вышеперечисленных шагов вы можете преобразовать файл в формат WAV. Подробные инструкции по конвертации вы можете найти в части 3.

Vidmore Sr Сохранить запись

Часть 3. Как конвертировать любое видео / аудио в WAV

1. Бесплатный онлайн-аудио конвертер Vidmore

Vidmore Бесплатный онлайн-конвертер аудио - это ваше программное обеспечение для преобразования ваших аудиофайлов в другой аудиоформат в Интернете. Он поддерживает все основные форматы ввода и вывода, чтобы помочь вам с удобством получить желаемый формат. Мало того, вы также можете использовать его для преобразования любого типа видео в желаемый аудиоформат. Это особенно полезно при копировании аудио из видео. Самое приятное, что он работает в любом веб-браузере, поэтому вам не нужно устанавливать какое-либо приложение. Если одна из ваших проблем - научиться создавать файлы WAV на Mac, эта программа может вам помочь. С помощью этой программы вы также сможете узнать, как создать файл WAV из MP3 или других аудиоформатов по своему усмотрению. Чтобы дать вам руководство, взгляните на следующие шаги.

Шаг 1. Запустите Vidmore Free Online Audio Converter с помощью браузера и добавьте свою звукозапись. Если вы используете инструмент впервые, загрузка и установка программы запуска в вашу компьютерную систему займет всего несколько секунд.

Vidmore Fac Добавить файл записи

Шаг 2. После добавления звукозаписи отметьте WAV переключатель и выберите папку вывода для файла WAV, щелкнув Перерабатывать кнопка.

Шаг 3. Ударь Перерабатывать еще раз, чтобы окончательно сохранить файл WAV. После завершения процесса преобразования вы можете прослушивать воспроизведение из папки, в которой сохранен преобразованный звук.

Vidmore Fac Преобразование аудиозаписи

2. Vidmore Video Converter Ultimate

Еще одна программа, которая позволит вам конвертировать как аудио, так и видео файлы, - это Конвертер видео Vidmore Ultimate. Это универсальное мультимедийное программное обеспечение, которое предлагает различные функции, такие как преобразование видео / аудио, редактирование видео, создание GIF и многое другое. Следовательно, если вы ищете что-то другое, кроме конвертации файлов, то это приложение, вероятно, для вас. Чтобы узнать, как создать файл WAV на Mac или Windows путем преобразования преобразованного файла, следуйте инструкциям в руководстве.

Шаг 1. Загрузите и установите приложение на свой Mac или ПК с Windows.

Шаг 2. Запустите программу на своем компьютере и загрузите звукозапись, щелкнув значок «Плюс» в главном интерфейсе.

Шаг 3. Открой Профиль и перейдите на вкладку Аудио. В левом разделе выберите WAV из выбора формата.

Vidmore Vc Выбрать формат WAV

Шаг 4. Наконец, нажмите кнопку Конвертировать все кнопку в нижней части интерфейса.

Vidmore Vc Преобразование аудиозаписи

Часть 4. Часто задаваемые вопросы по созданию файла WAV

Как создать файл WAV на iPhone?

Существуют инструменты, которые могут помочь вам записать или создать файл WAV на вашем iPhone. Одна из популярных программ - Хокусай. Перед тем, как начать запись, убедитесь, что в качестве выходного формата выбрана несжатая волна (WAV).

Как создать файл WAV из iTunes?

Вы можете создавать файлы WAV из iTunes с помощью метода преобразования. Все, что вам нужно сделать, это изменить Настройки импорта в iTunes. Выбирать Кодировщик WAV от Импортировать с помощью поле, а затем создайте WAV-версию звукового клипа из Перерабатывать вариант в iTunes.

Как открывать и воспроизводить файлы WAV?

Существует множество программ, которые можно использовать для открытия и воспроизведения файлов WAV. Но если вы не хотите загружать какое-либо приложение, вы можете использовать Quicktime для воспроизведения файлов WAV на Mac. С другой стороны, встроенный WAV-плеер Windows также может распознавать и воспроизводить файлы WAV.

Вывод

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

Попробуйте Vidmore Video Converter бесплатно

Универсальный набор инструментов для преобразования и редактирования видео и аудио файлов в Windows 11/10/8/7, Mac OS X 10.12 и выше

Читайте также: