跳转至内容

数据表示基础:声音合成

来自维基教科书,开放的书籍,开放的世界

试卷 2 - ⇑ 数据表示基础 ⇑

← 奈奎斯特定理 声音合成 流媒体音频 →


Fairlight CMI 系列 II – 一台早期的数字合成器
声音合成 - 电子产生的声音,模仿乐器或人声

声音合成器也被用来创造传统音乐场景中不存在的电子声音。1951 年,曼彻斯特大学使用 Ferranti Mark 1 计算机创造了最早的计算机生成的音乐示例。从那时起,计算机对音乐行业产生了巨大影响,本节将深入探讨声音合成。

与从 MP3 和 AAC 等现场录音中获取的录音相比,声音合成通常会产生更小的文件大小,因为它记录的是符号,计算机使用选定的编程或数字乐器来执行这些符号,而不是记录每秒声音的波形。但是,录音通常听起来不像现场录音那么真实。听听左边的音乐,你就会明白我的意思了。


MIDI 连接器和 MIDI 线缆

一种常见的产生合成声音音乐的方法是使用 MIDI。MIDI 不记录模拟声音,而是发送数字信号,记录乐谱、音高和强度、控制信号(用于音量、颤音和声像等参数)、提示以及用于设置节奏的时钟信号。然后,计算机解释这些命令并输出与之对应的音频。MIDI 是一种流行的从电子键盘等设备记录音乐的方式。


扩展:创建一个声音合成器

我们知道,键盘上的每个字符都与一个 ASCII 码相关联。我们将使用此代码,将我们的计算机键盘变成一个音乐键盘!

console.beep(frequency,duration)

其中 frequency 是每秒的振荡次数,duration 是哔哔声持续的时间,单位为 毫秒

AscW(key)

其中 AscW 是按下的键的 ASCII 数字。这将得到

        Dim duration As Integer = 200
        Dim frequency As Integer
        Dim key As String 'stores the numeric ASCII value

        Console.WriteLine("press any key to play music, press q to quit")

        Do
            key = Console.ReadKey().KeyChar 'get the numeric ASCII value input
            frequency = (AscW(key) + 50) * 50
            Console.Beep(frequency, duration)
        Loop Until key = "q"

尝试添加以下内容以扩展此功能

+ - increase and decrease frequency
= _ increase and decrease duration of sound
练习:声音合成
为什么你可能更愿意使用声音合成而不是录制管弦乐队

答案

  • 声音合成会生成更小的文件大小,并且不会损失质量
  • 声音合成允许在录音后轻松编辑文件
  • 声音合成允许生成传统乐器无法实现的声音
为什么你可能不想使用声音合成

答案

  • 声音合成难以重现传统乐器发出的声音
  • 声音合成难以重现人声
华夏公益教科书