Russian Qt Forum
Ноябрь 23, 2024, 04:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Чтение самплов из wav файла в массив  (Прочитано 9241 раз)
Hrundel
Гость
« : Март 27, 2013, 23:10 »

Всем привет!!!

Ситуация такая:
Заголовок успешно читаю. Хочу получить массив с самплами.
Проблема: Не понимаю как преобразовать битовое представление.
Цель: Необходимость выводить в виде звуковой волны с последующими трансформациями и записью в файл. (Задание курсовой.)

Пока выглядит так:

Это структура:

Код:
typedef struct  WAV_HEADER{
        char                RIFF[4];        // RIFF Header      Magic header
        unsigned long       ChunkSize;      // RIFF Chunk Size
        char                WAVE[4];        // WAVE Header
        char                fmt[4];         // FMT header
        unsigned long       Subchunk1Size;  // Size of the fmt chunk
        unsigned short      AudioFormat;    // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM
        unsigned short      NumOfChan;      // Number of channels 1=Mono 2=Sterio
        unsigned long       SamplesPerSec;  // Sampling Frequency in Hz
        unsigned long       bytesPerSec;    // bytes per second
        unsigned short      blockAlign;     // 2=16-bit mono, 4=16-bit stereo
        unsigned short      bitsPerSample;  // Number of bits per sample
        char                Subchunk2ID[4]; // "data"  string
        unsigned long       Subchunk2Size;  // Sampled data length
 
    }wav_hdr;

Это читалка заголовка в конструкторе:

Код:
wav_hdr wavHeader;
 
     FILE *wavFile;
 
     int headerSize = sizeof(wav_hdr), filelength = 0;
 
     wavFile = fopen( FileName.toAscii().data() , "r" );
 
         if(wavFile == NULL){
             std::cout << "ERROR READ FILE" << std::endl;
         }
         else
         {
             std::cout << "FILE IS OPEN TO READ" << std::endl;
 
         fread(&wavHeader,headerSize,1,wavFile);
         filelength = getFileSize(wavFile);
 
         for (int i = 0; i < wavHeader.Subchunk2Size; i++)
         {
             audioData[i] = // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                            // А что тут теперь делать ???
                            // Как читать данные ???
                            // И в каком формате они должны быть представленны ???
                            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         }
 
         fclose(wavFile);

Буду благодарен за объяснения и примеры кодов!
« Последнее редактирование: Апрель 07, 2013, 17:51 от Hrundel » Записан
carrygun
Гость
« Ответ #1 : Март 28, 2013, 07:48 »

Я на таком уровне с аудио не ковырялся, но помоему в 5й версии в QtMultimedia есть для этого инструменты. Может стоит посмотреть туда?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #2 : Март 28, 2013, 08:21 »

Буду благодарен за объяснения и примеры кодов!
Когда-то делал подобное. Вот прикладываю ограниченную читалку wav. (читает первую дорожку)
C записью не сложилось.

Описание формата - http://www.sonicspot.com/guide/wavefiles.html
« Последнее редактирование: Март 28, 2013, 08:25 от alex312 » Записан
Hrundel
Гость
« Ответ #3 : Март 28, 2013, 14:04 »

Всем привет, ответ нашелся здесь:

http://www.prog.org.ru/topic_23003_0.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 23.