Форум программистов, компьютерный форум CyberForum.ru

Сохранить как .wav файл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ramoncheg
24 / 17 / 1
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.05.2013, 20:04     Сохранить как .wav файл #1
Подскажите пожалуйста как сохранить массив как wav файл, с полями структуры wav файла я разберусь , что писать в поле data ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ramoncheg
24 / 17 / 1
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
21.05.2013, 20:59  [ТС]     Сохранить как .wav файл #2
нежели никто не знает ? киньте хоть литературу по сохранению wav файлов или исходники хоть какие - то ...
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
21.05.2013, 21:38     Сохранить как .wav файл #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/ Структура, описывающая заголовок WAV файла.
struct WAVHEADER
{
// WAV-формат начинается с RIFF-заголовка:
 
// Содержит символы "RIFF" в ASCII кодировке
// (0x52494646 в big-endian представлении)
char chunkId[4];
 
// 36 + subchunk2Size, или более точно:
// 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
// Это оставшийся размер цепочки, начиная с этой позиции.
// Иначе говоря, это размер файла - 8, то есть,
// исключены поля chunkId и chunkSize.
unsigned long chunkSize;
 
// Содержит символы "WAVE"
// (0x57415645 в big-endian представлении)
char format[4];
 
// Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
// Подцепочка "fmt " описывает формат звуковых данных:
// Содержит символы "fmt "
// (0x666d7420 в big-endian представлении)
char subchunk1Id[4];
 
// 16 для формата PCM.
// Это оставшийся размер подцепочки, начиная с этой позиции.
unsigned long subchunk1Size;
 
// Аудио формат, полный список можно получить здесь [url]http://audiocoding.ru/wav_formats.txt[/url]
// Для PCM = 1 (то есть, Линейное квантование).
// Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
unsigned short audioFormat;
 
// Количество каналов. Моно = 1, Стерео = 2 и т.д.
unsigned short numChannels;
 
// Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
unsigned long sampleRate;
 
// sampleRate * numChannels * bitsPerSample/8
unsigned long byteRate;
 
// numChannels * bitsPerSample/8
// Количество байт для одного сэмпла, включая все каналы.
unsigned short blockAlign;
 
// Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
unsigned short bitsPerSample;
 
// Подцепочка "data" содержит аудио-данные и их размер.
 
// Содержит символы "data"
// (0x64617461 в big-endian представлении)
char subchunk2Id[4];
 
// numSamples * numChannels * bitsPerSample/8
// Количество байт в области данных.
unsigned long subchunk2Size;
 
// Далее следуют непосредственно Wav данные.
}header;
        int size=10000;
        unsigned short data=new unsigned short[size];
        // заполнить data;
    header.sampleRate=44000.0;// частота оцифровки
    header.numChannels=1; // одноканальный
    header.bitsPerSample=16; // бит на один отсчет
    header.blockAlign=2; // размер блока в байтах
    header.subchunk2Size=size*2; // размер данных
 
    FILE* pf;fopen_s(&pf,buf,"wb");
        fwrite(&header, sizeof(WAVHEADER), 1, pf); 
        fwrite(data,2,size,pf);
        fclose(pf);
Ramoncheg
24 / 17 / 1
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
21.05.2013, 22:43  [ТС]     Сохранить как .wav файл #4
Код
[bcc32 Error]  Undefined symbol 'buf'
Что нужно подключать ?

Кстати с data такая же проблема
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
22.05.2013, 19:17     Сохранить как .wav файл #5
buf - это имя открываемого файла.
(Я скопировал из работающего исходника и забыл заменить).
А под data память выделяется динамически (строка 66 моего кода), т.к. она может быть достаточно большой.
В примере под каждый отсчет выделяется двухбайтовое слово (unsigned short).
Если надо писать стерео, то отсчеты чередуются (2 байта на левый, 2 байта на правый).
Yandex
Объявления
22.05.2013, 19:17     Сохранить как .wav файл
Ответ Создать тему
Опции темы

Текущее время: 16:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru