有没有办法在没有预先录制的声音文件的情况下在 PC 或 Mac 上播放圣诞曲子?(没有 .mp3 或 .wav 或任何声音文件)
我记得在我的 TI 99/4A 和 Apple II 上可以播放声音(类似于音乐)。不确定现代计算机是否具有这些能力(除了beep)。
Java 中的“Jingle Bells”(像往常一样臃肿),使用JFugue,带有管状铃铛和木琴(复音!):
import org.jfugue.*;
public class JingleBells
{
public static void main(String[] args)
{
Player player = new Player();
player.play("T170 "+
" V0 I[XYLOPHONE] C4q C4q C3h C4q C4q C3h C3q B3q A3q G3q C4h "+
" V1 I[TUBULAR_BELLS] E5q E5q E5h E5q E5q E5h E5q G5q C5q D5q Eqh "+
" V2 I[XYLOPHONE] G3h G2q G3q G3h G3h");
}
}
说到“像哔声一样糟糕”,如果你在你的 linux 机器上安装了哔声,你可以运行以下 shell 脚本(与 Jeremy Ruten 的回答相同):
#!/bin/sh
beep -f 659 -l 400
sleep 0.05
beep -f 659 -l 400
sleep 0.05
beep -f 659 -l 800
sleep 0.05
beep -f 659 -l 400
sleep 0.05
beep -f 659 -l 400
sleep 0.05
beep -f 659 -l 800
sleep 0.05
beep -f 659 -l 400
sleep 0.05
beep -f 783 -l 400
sleep 0.05
beep -f 523 -l 400
sleep 0.05
beep -f 587 -l 400
sleep 0.05
beep -f 659 -l 800
是的,你可以玩midi。
Midi 本身不编码声音,它编码用于播放音乐的信息;音高、音调、强度等。
在 codeplex 上有一个 C# midi 工具包:http: //www.codeproject.com/KB/audio-video/MIDIToolkit.aspx
声音的质量完全取决于用来播放它的 MIDI 设备,因此它的质量会因计算机而异。
您可以在以下位置找到一份不错的圣诞 midi 文件列表:http ://www.lockergnome.com/midi/
Windows Media Player 可以像 Quick Time 一样播放 MIDI 文件(我相信)。
PLAY "e4 e4 e2 e4 e4 e2 e4 g4 c4 d4 e2"
即时生成 PCM 数据怎么样?PCM - 脉冲编码调制 - 声音只是模拟音响系统中的一堆电压样本。
想想扬声器。播放声音时,它会振动。如果你拿尺子以比声音频率更快的速度测量扬声器的位置会怎样?你会得到一张波形图。这正是 PCM 数据的样子,每个测量值都存储为 8 位或 16 位整数。频率,比如 44khz 是每秒的样本数。CD 使用 44khz 采样频率和 16 位采样。
DirectSound(在 Windows 上)和OpenAL(跨平台)是您可以用来播放充满 PCM 数据的数据缓冲区的两个库。我过去使用过 DirectSound,不是播放数据,而是从麦克风读取数据以获取音量。
如果您想为某个音符创建一个 PCM 样本,您只需计算频率(这里有一个表),然后在缓冲区中放入一个正弦波。您可以通过添加它们来混合不同的频率(确保总和小于最大音量,以避免削波)
MIDI 是一种选择,尽管在 PC 上它通常听起来几乎和哔哔声一样糟糕。