@kaktak255

Воспроизведение звука из буфера без сохранения?

Нашел вот такой код (комментарии не мои) :
#include <windows.h>
#include <fstream>
#include <iostream>


const int len = 6000 * 10; // 10 секунд
// Вот тут самая "умная" часть, это параметры, включая длительность битрейт и битность.
// Во всё это я не вникал, это нужно только для создания файла.
byte buffer[len] = {0x52, 0x49, 0x46, 0x46, 0xfa, 0x3c, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x70, 0x17, 0x00, 0x00, 0x70, 0x17, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x64, 0x61, 0x74, 0x61, 0xd5, 0x3c, 0x00, 0x00};
 
int main()
{
	int i = 42, l = len - 1, r;
 
	while(++i < l) // Простой разброс семплов, вниз-вверх, амплитуда сигнала не будет больше 42х..
	{
		r = rand() % 3;
		
		if(r == 0) 
			buffer[i] = 127;
		else if(r == 1) 
			buffer[i] = 128;
		else 
			buffer[i] = 129;
	}
	buffer[l] = 0;
 
	std::ofstream file;
	file.open("111.wav");
	file.write((char*)&buffer[0], 5000*10);
	file.close();
	return 0;
}


И что бы прослушать результат нужно открывать файл 111.wav , но хотелось бы прослушать это после генерации прямо в программе , и без сохранения в файл , а как ?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Если вы не программист - никак.

Воспроизвести звук программно это несколько сложнее, чем записать данные в файл. Но принцип примерно такой же - отрыть устройство воспроизведения и писать в него данные, которые надо воспроизводить.
Но из-за того что воспроизведение должно быть без задержек, само воспроизведение занимает время и API ОС и оборудование умеют работать только с некоторыми типами данных возникают особенности, усложняющие процесс.
Проще всего использовать какую-либо библиотеку, которая большую часть работы возьмет на себя. Можно использовать PortAudio, например, но она на Си и достаточно низкоуровневая. Можно использовать API ОС но это совсем низкоуровнево и может быть достаточно сложно для начинающего.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы