目录

第1章保存    1

1.1 操作    1

1.2 波形说明    4

1.3 波形整形    5

1.4 压缩    8

第2章载入    9

2.1 操作    9

2.2 音量    9

第3章 wav2bin代码解析    10

3.1 读取一个数据位    10

第1章保存

本章将介绍如何把PC-1500机内的BASIC代码保存到PC的wav文件内。您需要:PC-1500的底座(CE-150)、录音软件(本章以Cool Edit 2.1为例进行说明)、E500Comm14.11.23版

1.1 操作

准备一根音频线。普通的音频线也行,如下图所示

图1.1

音频线一端插入底座的MIC插孔(这是PC-1500输出音频信号的地方),另一端插入PC的MIC插孔。一定不要插入PC的Line In插孔。Line In和MIC都是PC音频输入的插孔,但它们有很大的区别:Line In直接把音频信号传给声卡,MIC会把音频信号放大后再传给声卡。PC-1500输出的音频信号很弱,使用Line In插孔,PC根本无法辨认。

运行Cool Edit 软件,新建一个波形文件,如下图所示:

采样率建议16000以上。声道固定为"单声道",采样精度固定为"8位"。

图1.2

单击下图的录音按钮,然后在PC-1500上运行CSAVE命令。Cool Edit 将录音。CSAVE命令执行完毕,请单击下图的停止按钮。

图1.3

注意波形的最大值和最小值,两者的差值应在80左右,太小则说明采集到的信号太弱了。

图1.4

解决办法就是调整PC上麦克风的音量和麦克风加强,如下图所示:

图1.5

Cool Edit里单击【文件】【另存为】菜单项,将录好的音频保存到wav文件里,如下图所示:

图1.6

1.2 波形说明

上一节记录下来的波形如下图所示。

图1.7

理想的波形应该是正弦波,如下图所示:

图1.8

码元宽度(竖线的间隔)为0.0004秒。左边3个码元内的正弦波频率为2500Hz;右边4个码元内的正弦波频率为1250Hz。高频码元被当做1,低频码元被当做0。8个码元1组成一个数据位1;8个码元0组成一个数据位0。因此,PC-1500输出的音频信号,其波特率为2500,其比特率大概为2500/8=312.5,每秒大概只能输出40个字节(事实上,每秒大概只能输出15个左右的字节。1KB的程序大概要1分钟才能传输完毕)。

1.3 波形整形

波形整形有这么几个目的:

1、图1.7所示波形其振幅非常关键:振幅太小则PC-1500将无法接收音频信号。因此,有必要将波谷的样本值调整为0,波峰的样本值调整得大一些(一般大于180即可)。

2、可以简化波形,如下图所示:可更改采样率为5000Hz,这样一个码元里只需要2个采样点。左边三个码元表示1,右边四个码元都表示0。

图1.9

简化之后,wav文件的大小会减小很多。假定录制wav文件时的采样率为16000Hz,而简化后的采样率变成了5000Hz,数据量将减少近70%。

不过,播放简化后的wav文件其波形就不是非常完美的了。下图是使用Cool Edit打开globe.wav文件(下载自www.pc1500.com)看到的内容:

图1.10

globe.wav的采样值只有两个:0和173。上图上面一排小方块的采样点,其采样值就是173。为什么不设置为最大值255呢?因为如上图所示:高频变低频时,会有一个突然变高的波峰。为了让这个突变的波峰尽量接近255,只能设置采样值的最大值为173了。

wav文件的波形整形请通过E500Comm来实现。该程序下载方法:

进入网盘 http://pan.baidu.com/s/1gd7XDkf

再进入 public\Tools\E500Comm 下载压缩包E500Comm14.11.23.rar

使用E500Comm处理wav文件的步骤:

1、运行E500Comm。选择计算器为"PC-1500",然后单击"确定"按钮;

图1.11

2、程序主界面请单击"1.程序"按钮

图1.12

3、单击【文件】【打开...】菜单项,载入wav文件,如下图所示。

图1.13

4、单击上图【文件】【保存】菜单项(或【另存为】菜单项),保存wav文件。

1.4 压缩

波形整形后,能否压缩为MP3或wma?经笔者测试是不行的。因为MP3和wma都是有损压缩。

第2章载入

本章将介绍如何把录制在wav文件里的BASIC代码载入到PC-1500机内。

2.1 操作

音频线一端插入底座的EAR插孔(这是PC-1500输入音频信号的地方,也就是"耳朵"),另一端插入PC的Line Out插孔。一定不要插入PC的耳机插孔。Line Out和耳机都是PC音频输出的插孔,但它们有很大的区别:Line Out是声卡直接输出的音频信号,耳机则是声卡输出的音频信号经放大后输出的。不使用耳机的原因一是音量太大,二是容易失真。

PC-1500上运行命令CLOAD,PC上播放wav文件。注意:PC上的能突然发声的程序请关闭,如:QQ。否则会打扰PC-1500接听wav文件。

2.2 音量

PC-1500接听声音文件,最难控制的就是音量。

该如何精准的调节音量呢?笔者在这里介绍一个方法——使用 Cool Edit 查看Line Out输出的音频信号。具体做法为:

1、将插入PC-1500底座的EAR孔的音频线插头拔下来,插入PC的Line In插孔。也就是说:Line Out输出的音频信号直接进入Line In插孔;

2、PC上播放wav文件;

3、使用Cool Edit软件录制音频,查看音频波形的振幅。这个振幅最好在170以上。

对于波形被处理后的wav文件,简单的把音量调整到最大即可(假定播放wav音频的软件是Windows Media Player,则其音量也要最大。其它播放软件不知是否放大了音频信号,最好用Cool Edit查看一下音频输出)。

第3章 wav2bin代码解析

wav2bin下载自http://www.pocketmuseum.com/index.html。它可以将wav文件转换为bas文件(文本格式的BASIC代码)和img文件(二进制格式的BASIC代码)。

3.1 读取一个数据位

3.2毫秒内,8个周期的高频波(2500Hz),表示二进制位1。如下图所示:

图3.1

3.2毫秒内,4个周期的低频波(1250Hz),表示二进制位0。如下图所示:

图3.2

换句话说就是:二进制位1与中间红线的交点个数为16;二进制位0与中间红线的交点个数为8。

数据存入wav文件时,会有1个起始位0,4个数据位,6个停止位1。所以,问题的关键在于把数据位前面的两个二进制位10读取出来。换句话说就是找到一段6.4毫秒的数据,前面3.2毫秒交点数为16,后面3.2毫秒交点数为8。这样就找到了起始位,接着读取4个数据位。

PC-1500的代码存入WAV文件的更多相关文章

  1. wav文件系列_2_Python实现读写

    本文介绍了 Python 实现音频读写的方法.Python wave 模块提供便捷的 wav 文件操作.该模块并不支持压缩与解压,但支持单声道/立体声的转换. 参考: [1] wave — Read ...

  2. C++标准库实现WAV文件读写

    在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...

  3. C#播放wav文件

    C#使用HWQPlayer类播放wav文件 类的代码: using System.IO; using System.Runtime.InteropServices; namespace HoverTr ...

  4. '/test.txt'; // 把抓取的代码写入该文件

      将获得的代码直接写入某个文件 代码如下:<?php $urls = array( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'ht ...

  5. Windwos平台上ffmpeg解码音频并且保存到wav文件中

    先附上代码,测试通过 #include <stdio.h> #include <math.h> #include "libavutil/avstring.h" ...

  6. wav文件系列_1_wav格式解读

    本文介绍 wav 文件格式,主要关注该类格式的结构. 参考: [1] 以一个wav文件为实例分析wav文件格式 ( 2017.04.11 CSDN ) [2] WAV ( Wikipedia ) [3 ...

  7. 将数组,矩阵存入csv文件中

    我们在做各种模型训练时,往往会先将数据处理成矩阵,然后交给建模的人去训练.这时通常数据清洗者提交的是保存了矩阵的文件,一般为TXT或csv,接下来主要讲解我在实现这个过程中遇到的一些问题. impor ...

  8. 音视频学习系列第(三)篇---wav文件的存储和解析

    音视频系列 什么是wav wav是一种无损的音频文件格式,wav文件有两部分,第一部分是文件头,记录一些重要的参数信息,如音频的采样率,通道数,数据位宽,第二部分是数据部分,数据部分可以是PCM,也可 ...

  9. Python解析Wav文件并绘制波形的方法

    资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...

随机推荐

  1. Codeforces Round #370 (Div. 2) C

    Description Memory is now interested in the de-evolution of objects, specifically triangles. He star ...

  2. Objective-C之null NaN undefined

    http://blog.csdn.net/siemenliu/article/details/6568306

  3. ListableBeanFactory

    ListableBeanFactory public interface ListableBeanFactory extends BeanFactory 该接口中定义了可以获取配置中所有bean的信息 ...

  4. 【leetcode❤python】 88. Merge Sorted Array

    #-*- coding: UTF-8 -*-class Solution(object):    def merge(self, nums1, m, nums2, n):        "& ...

  5. ubuntu下解压zip文件乱码

    安装unar 即可解决问题 sudo apt get install unar

  6. [Java解惑]字符串

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. Codeforces Round #377 (Div. 2) D. Exams 二分

    D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  8. [原]五分钟搭建gitserver

    本来在忙一些事情,结果刚才突然收到一个临时的事情,号称很着急. 问了一下,原来是需要在本地搭建一个git库,但其实之前我是有做过gitserver的,不过是在阿里云(部分分布在青云)上,而且目前在使用 ...

  9. nyoj325 zb的生日(DFS)

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  10. ACCESS 数据库使用配置调整解决方案

    分享到 一键分享 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 64位服务器无法使用ac ...