9

有没有办法在没有预先录制的声音文件的情况下在 PC 或 Mac 上播放圣诞曲子?(没有 .mp3 或 .wav 或任何声音文件)

我记得在我的 TI 99/4A 和 Apple II 上可以播放声音(类似于音乐)。不确定现代计算机是否具有这些能力(除了beep)。

4

6 回答 6

7

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");
    }
}
于 2008-12-24T21:12:50.500 回答
6

说到“像哔声一样糟糕”,如果你在你的 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
于 2008-12-24T22:13:00.270 回答
3

是的,你可以玩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 文件(我相信)。

于 2008-12-24T20:27:48.250 回答
3
PLAY "e4 e4 e2 e4 e4 e2 e4 g4 c4 d4 e2"
于 2008-12-24T20:33:57.770 回答
2

即时生成 PCM 数据怎么样?PCM - 脉冲编码调制 - 声音只是模拟音响系统中的一堆电压样本。

想想扬声器。播放声音时,它会振动。如果你拿尺子以比声音频率更快的速度测量扬声器的位置会怎样?你会得到一张波形图。这正是 PCM 数据的样子,每个测量值都存储为 8 位或 16 位整数。频率,比如 44khz 是每秒的样本数。CD 使用 44khz 采样频率和 16 位采样。

DirectSound(在 Windows 上)和OpenAL(跨平台)是您可以用来播放充满 PCM 数据的数据缓冲区的两个库。我过去使用过 DirectSound,不是播放数据,而是从麦克风读取数据以获取音量。

如果您想为某个音符创建一个 PCM 样本,您只需计算频率(这里有一个),然后在缓冲区中放入一个正弦波。您可以通过添加它们来混合不同的频率(确保总和小于最大音量,以避免削波)

于 2008-12-24T20:39:56.463 回答
1

MIDI 是一种选择,尽管在 PC 上它通常听起来几乎和哔哔声一样糟糕。

于 2008-12-24T20:26:03.510 回答