Войти
ФлеймФорумРазработка игр

Платформы Хулиона, РЕАЛЬНО гринлайт, стим

Страницы: 1 2 373 74 Следующая »
#0
8:23, 19 авг. 2016

Допустим у меня есть ЭН байтов, в которых уже хранится расжатая звуковая волна. Как отправить их на звуковуху, минимальным количеством кода, не скачивая 100500 монструозных СДК?
Почему со звуком такой ад и израиль? Я опенАЛ скачал, там половина семплов не собирается нифига, надо ещё отдельно рыть инет, чтоб найти алут.х и алут.либ. Пример с директ-саундом тоже показался переусложнённым. Почему картинку вывести на экран нехрен делать, создал дибсекцию, а там битблит и все дела, а со звуком чтото простых решений нету нифига.
А ещё пожалуйста проголосуйте ЗА мой проект: http://steamcommunity.com/sharedfiles/filedetails/?id=757859107

#1
8:29, 19 авг. 2016

waveOutWrite и фсё,... не сложнее чем, BitBlt

#2
8:48, 19 авг. 2016
Отправить волну на звуковуху.

Воу, воу !
Полегче !
Не гони волну :)

Если Винда то можно XAUDIO2 правдо чуть больше возни чем с waveOutWrite.
Но тоже не слишком сложно.
В XAUDIO2 еще можно навернуть всякими эхо\вибрациями эффектами.

Звук(или что тоже звуковой буфер) можно менять на лету. И сразу слышать в реальном времени изминения.
Имеет много звуковых буферов. Что дает возможность одновременно проиграть 16 и более разных звуков.

 CoInitializeEx( NULL, COINIT_MULTITHREADED );
 IXAudio2* pXAudio2;
 HRESULT hr = XAudio2Create(&pXAudio2);
  if (FAILED(hr))
  {
    errorText->Text = "XAudio2Create failure: " + hr.ToString();
    return;
  }
  // Создаем мастеринговый голос
  IXAudio2MasteringVoice*  pMasteringVoice;
  hr = pXAudio2->CreateMasteringVoice(&pMasteringVoice);
  if (FAILED(hr))
  {
    errorText->Text = "CreateMasteringVoice failure: " + hr.ToString();
    return;
  }
  // Создаем голос источника
  WAVEFORMATEX waveformat;
  waveformat.wFormatTag = WAVE_FORMAT_PCM;
  waveformat.nChannels = 1;
  waveformat.nSamplesPerSec = 44100;
  waveformat.nAvgBytesPerSec = 44100 * 2;
  waveformat.nBlockAlign = 2;
  waveformat.wBitsPerSample = 16;
  waveformat.cbSize = 0;
  IXAudio2SourceVoice* pSourceVoice;
  hr = pXAudio2->CreateSourceVoice(&pSourceVoice, &waveformat);//Сколько надо голосов столько раз делаешь pXAudio2->CreateSourceVoice(&pSourceVoice2, &waveformat);
  if (FAILED(hr))
  {
    errorText->Text = "CreateSourceVoice failure: " + hr.ToString();
    return;
  }
  // Запускаем голос источника
  XAUDIO2_BUFFER Xaudio2Buf4;  
  Xaudio2Buf4.LoopCount = 0;
  Xaudio2Buf4.Flags = XAUDIO2_END_OF_STREAM;
  Xaudio2Buf4.AudioBytes = 800000; 
  Xaudio2Buf4.pAudioData = &soundData;
  pSourceVoice->SubmitSourceBuffer( Xaudio2Buf4() );
  hr = pSourceVoice->Start();
Если надо заново проиграть звук то:
pSourceVoice->Stop();
pSourceVoice->FlushSourceBuffers();//без этой строки звук будет как на паузе и продолжит играть там где остановился. А FlushSourceBuffers ставит буфер с начало.
pSourceVoice->Start();

Так же можно на лету менять частоту(скорость) воспроизведения pSourceVoice и громкость тоже.
floatValue это число например 0.5f или 1.0f или 1.5f
pSourceVoice->SetFrequencyRatio(floatValue,XAUDIO2_COMMIT_NOW);

#3
9:29, 19 авг. 2016

TarasB
> Почему картинку вывести на экран нехрен делать, создал дибсекцию, а там битблит
> и все дела
Когда знаешь тогда просто. А в 2006-ом я пару месяцев с этим сношался, пока один старый знакомый мне не помог наконец, написав код.

#4
9:36, 19 авг. 2016

MatLab.

#5
9:38, 19 авг. 2016

OpenCL :)

#6
9:39, 19 авг. 2016

0iStalker
Забыл сказать, существует офигенно простой способ сразу проиграть wav-файл. PlaySound(). Но какого-то хрена рукожопы из МС не приделали к нему ни кеширования, ни чего-то ещё, из-за этого эта функция на пол-секунды замораживает поток, который её вызывает. Даже если я замудюсь и сделаю вызов звука из другого потока, всё равно полусекундная задержка неприемлема.

#7
9:39, 19 авг. 2016

dave
ronniko
ВИНДИДЖЕЙВЬЮ

#8
9:44, 19 авг. 2016

Ага.
Djvu Reader :)

#9
9:51, 19 авг. 2016

МатЛаб на втором месте после Дживуридер по удобству для того чтобы гнать волну. Туда и обратно.
Все делается в три строчки.

#10
10:08, 19 авг. 2016

TarasB
А че в openAL не так? Уже ж скачал все. Даже я, когда ннужно было разобрался быстро!)
Потому что других адекватных способов не нашел.

#11
10:10, 19 авг. 2016

AcManZ
> А че в openAL не так?
Минимальный пример можно? А то в семплах что-то дофига лишнего, фреймворк у них даже свой поверх их же либы.

#12
10:51, 19 авг. 2016

0iStalker
> waveOutWrite
Попробовал. Получил кучу ошибок линкера. Ну хорошо, что гугл есть, я узнал, что надо прилинковать винмм.либ, я в проводнике запустил поиск по винту, где этот сраный либ находится, он показал длинный длинный путь, я его добавил в проект.
Но блин. Дебилы обоссанные, которые это всё так придумали, ну КАК, ну КАК я мог бы до этого догадаться без гугла? Красноглазые выкидыши вообще про юзабилити всего бреда, что они напридумывали, думали?! Почему везде надо в бубен бить?

#13
10:55, 19 авг. 2016

TarasB

> Дебилы обоссанные, которые это всё так придумали, ну КАК, ну КАК я мог бы до этого догадаться без гугла
Это написано в описании функции на MSDN. И вообще там много чего полезного эти дебилы для тебя написали.

#14
10:55, 19 авг. 2016

TarasB
Первая ссылка http://procplusplus.blogspot.ru/2011/06/openal.html?m=1

Страницы: 1 2 373 74 Следующая »
ФлеймФорумРазработка игр

Тема в архиве.