Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mmsystem. Запись и воспроизведение звука. Не воспроизводится правый канал. 
:(
    Опции темы
Mmsystem
Дата 1.7.2014, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.7.2014

Репутация: нет
Всего: нет



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

Переделывал для проигрывания готового wav файла(стерео), всё равно воспроизводит только левый канал.

В чём может быть ошибка?
(Пишу в Visual Studio под Windows)


Код

#include "stdafx.h"

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
#include <fstream>

#pragma comment(lib,"winmm.lib") 


using namespace std;

int sampleRate = 44100;

short int *waveIn;


void main()
{
        //Формат данных
    WAVEFORMATEX pFormat;
    pFormat.wFormatTag = WAVE_FORMAT_PCM;
    pFormat.nChannels = 2;               //Стерео - 2 канала   
    pFormat.wBitsPerSample = 16;            
    pFormat.nSamplesPerSec = sampleRate;     
    pFormat.nAvgBytesPerSec = sampleRate * pFormat.nChannels * pFormat.wBitsPerSample / 8; 
    pFormat.nBlockAlign = pFormat.nChannels * pFormat.wBitsPerSample / 8;    
    pFormat.cbSize = 0;

    waveIn = new short int[pFormat.nAvgBytesPerSec * 2];

    memset(waveIn,0,pFormat.nAvgBytesPerSec * 2);
   
       //Запись звука в буфер waveIn
    HWAVEIN hWaveIn;
    WAVEHDR waveInHdr;

    waveInOpen(&hWaveIn, WAVE_MAPPER, &pFormat, NULL, NULL, WAVE_FORMAT_DIRECT);

    waveInHdr.lpData = (LPSTR)waveIn;
    waveInHdr.dwBufferLength = pFormat.nAvgBytesPerSec * 2;
    waveInHdr.dwBytesRecorded = 0;
    waveInHdr.dwUser = 0L;
    waveInHdr.dwFlags = 0L;
    waveInHdr.dwLoops = 0L;

    waveInPrepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR));

    waveInAddBuffer(hWaveIn, &waveInHdr, sizeof(WAVEHDR));

    waveInStart(hWaveIn);

    do{} 
    while(waveInUnprepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING);

    waveInClose(hWaveIn);
    
       //Воспроизведение из буфера waveIn
    HWAVEOUT hWaveOut;
    WAVEHDR WaveOutHdr;

    waveOutOpen(&hWaveOut, WAVE_MAPPER, &pFormat, NULL, NULL, WAVE_FORMAT_DIRECT);


    WaveOutHdr.lpData = (LPSTR)waveIn;
    WaveOutHdr.dwBufferLength = pFormat.nAvgBytesPerSec * 2;
    WaveOutHdr.dwBytesRecorded = 0;
    WaveOutHdr.dwUser = 0L;
    WaveOutHdr.dwFlags = 0L;
    WaveOutHdr.dwLoops = 1L;

    waveOutPrepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));

    waveOutSetVolume(hWaveOut, 0xFFFF);

    waveOutWrite(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));

    do{} 
    while(waveOutUnprepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING);
    
    waveOutClose(hWaveOut);


    delete[] waveIn;

    system("pause");
 }

PM MAIL   Вверх
SVN74
Дата 13.7.2014, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



waveOutSetVolume(out, 0xffffffff);
PM MAIL WWW   Вверх
SVN74
Дата 26.7.2014, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



Так и нет ответа. Получилось?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1193 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.