Реализовать функцию объединения двух wav mono файлов в один wav stereo файл

193
08 февраля 2018, 17:21

Задание:"Реализовать функцию объединения двух mono файлов в один stereo файл, где первый файл является левым каналом, а второй правым каналом выходного wav файла. Значения BitsPerSample, SamplesPerSec должны быть одинаковыми. При различной длине звуковых сигналов выходной файл должен иметь длину наименьшего"

Создал заголовок wav файла, потом функцию, в которой мы имеем 3 файла: 2 моно и 1 стерео, вопрос состоит в том, как сделать из моно wav файлов, сделать стерео? Как записать сэмплы в разные каналы. В один я записывал через массив, но как переключиться или типо того?

Ниже привожу пример кода :

#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <Windows.h>
#include <iomanip>
#include <fstream>
using namespace std;
struct WAVHEADER
{
    char chunkId[4];
    unsigned long   chunkSize;
    char format[4];
    char subchunk1Id[4];
    unsigned long   subchunk1Size;
    unsigned short  wFormatTag;
    unsigned short  nChannels;
    unsigned long   SamplesPerSec;
    unsigned long   AvgBytesPerSec;
    unsigned short  blockAlign;
    unsigned short  BitsPerSample;
    char subchunk2Id[4];
    unsigned long   subchunk2Size;
};
void slianie(WAVHEADER header)
{
    FILE *file1, *file2, *file3;
    errno_t e1, e2, e3;
    e1 = fopen_s(&file1, "inputwav1.wav", "rb");
    e2 = fopen_s(&file2, "inputwav2.wav", "rb");
    e3 = fopen_s(&file3, "output.wav", "wb");
    WAVHEADER header1;
    fread_s(&header1, sizeof(WAVHEADER), sizeof(WAVHEADER), 1, file1);
    if (header.BitsPerSample != header1.BitsPerSample || header.SamplesPerSec != header1.SamplesPerSec)// по условию они одинаковые
    {
        cout << "Кол-во битов на сэмпл или кол-во сэмплов в секунду, в файлах, не совпадает";
        return;
    }

Я хотел сделать заполнение через массив и for ,но застрял.(Записать из файлов семплы в 2 массива и из них переписать в новый файл, но застрял на этих каналах). Очень надеюсь на помощь...

Answer 1

https://github.com/irrelevelephant/wav_enc. Там есть метод для записи стерео аудио. Как и сказал Владимир Мартьянов, сперва пишется левый канал, потом правый

READ ALSO
Поиска в бинарном файле по маске

Поиска в бинарном файле по маске

Есть бинарный файлВ нём нужно найти последовательности байтов по маске:

163
Как изменить размер спрайта directx 9?

Как изменить размер спрайта directx 9?

Как в directx 9 можно сменить размер спрайта ? Точней растянуть его на все окно программыИбо создаю текстуру и в размере ставлю вот эти параметры:

162
Не создаётся процесс через CreateProcess()

Не создаётся процесс через CreateProcess()

Есть некий процесс с параметрами, который должен корректно запускаться и останавливаться из NT-сервисаПопробовал два варианта его запуска...

187
Как организована память в std::deque?

Как организована память в std::deque?

Для лучшего понимания устройства контейнеров решил их все реализоватьИ вот столкнулся с проблемой на std::deque

188