C++ 特定的声音输出? [关闭]

Posted

技术标签:

【中文标题】C++ 特定的声音输出? [关闭]【英文标题】:C++ Specific Sound Output? [closed] 【发布时间】:2011-04-21 00:15:46 【问题描述】:

我想在我的计算机上连接一个电路,它使用音频输出作为交流电流,通过某些频率,然后将其整流为几个 LED,所以如果我编写一个程序,让您创建一个特定的模式并组合点亮的LED,会输出特定频率的声音。

如何使用 C++ 以特定频率播放声音?

可能吗?

【问题讨论】:

您使用的是什么操作系统?任何特定的库/框架? 完全取决于设备和设备驱动程序。 已关闭。如果不回答 James 和 Gabe 的问题,我们就无法为您提供有意义的答案。请注意,即使有了这些信息,您仍然应该自己研究这个问题,并且在遇到困难之前不要询问信息。但是,如果您的问题是关于电路的具体细节,那么您也可能会因为过于本地化而被关闭。在这种情况下,我建议在讨论板上寻求有关特定电路的帮助。 【参考方案1】:

您可以使用 OpenAL 做到这一点。

您需要生成一个包含代表您所需输出的 ​​PCM 编码数据的数组,然后使用所需的采样频率和格式在您的数组上调用 alBufferData()。请参阅OpenAL Programmers Guide 第 21 页了解 alBufferData() 函数所需的格式。

例如,以下代码播放 100hz 音。

#include <iostream>

#include <cmath>

#include <al.h>
#include <alc.h>
#include <AL/alut.h>

#pragma comment(lib, "OpenAL32.lib")
#pragma comment(lib, "alut.lib")

int main(int argc, char** argv)

  alutInit(&argc, argv);
  alGetError();

  ALuint buffer;
  alGenBuffers(1, &buffer);

  
    // Creating a buffer that hold about 1.5 seconds of audio data.
    char data[32 * 1024];

    for (int i = 0; i < 32 * 1024; ++i)
    
      // get a value in the interval [0, 1) over the length of a second
      float intervalPerSecond = static_cast<float>(i % 22050) / 22050.0f;

      // increase the frequency to 100hz
      float intervalPerHundreth = fmod(intervalPerSecond * 100.0f, 1.0f);

      // translate to the interval [0, 2PI)
      float x = intervalPerHundreth * 2 * 3.14159f;

      // and then convert back to the interval [0, 255] for our amplitude data.
      data[i] = static_cast<char>((sin(x) + 1.0f) / 2.0f * 255.0f);
    

    alBufferData(buffer, AL_FORMAT_MONO8, data, 32 * 1024, 22050);
  

  ALuint source;
  alGenSources(1, &source);

  alSourcei(source, AL_BUFFER, buffer);

  alSourcePlay(source);

  system("pause");

  alSourceStop(source);

  alDeleteSources(1, &source);

  alDeleteBuffers(1, &buffer);

  alutExit();

  return 0;

【讨论】:

以上是关于C++ 特定的声音输出? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中捕获 PC 游戏的声音输出? [复制]

如何在 C++ 中从音频输出中捕获声音

(C# 或 Java)将声音输出到均衡器

Swift:声音输出和麦克风输入 |使用 AudioKit |

苹果手机为啥视频声音小

将字符串传递给函数以输出它(C++)[关闭]