将wav采样数据写回原本的wav文件(一个未能实现但却很有意义的功能)

本文探讨了将提取的wav文件采样数据试图回写到原本wav文件的过程,虽然最终未实现,但作者强调了编程前的清晰需求和问题思考的重要性。在尝试中,作者遇到了数据回写后文件无法正常打开和体积增大的问题,发现数据类型匹配和文件操作模式是关键,但鉴于毕设需求,选择了其他实现方式。
摘要由CSDN通过智能技术生成

开始与结束的终章(El Psy Congroo)

这篇文章其实很重要,这篇文章的功能最后虽然未能实现,但是这篇文章的思考和感悟对于我整个毕设论文都有着举足轻重的作用。毕设论文查重报告已经通过,在此发出本篇文章,为后来者点亮一束灯塔中的光。

在前一篇文章的基础之上,我们已经成功的将wav文件中的采样数据成功提取了出来,并将每个样值以文本的形式保存在了txt文本当中,方便与后期的研究.接下来我们要尝试将保存的wav文件的采样数据转化为原本的wav文件,当然也可以将别的音频信号的采样数据也转化为wav文件.下面我们开始我们的编程工作.

编程前的问题思考

在经过了大量的编程实践以及学习以后,我越发明白了编程其实只是最后的一步实现工作.重要的是要明白自己编程到底要实现一个怎么样的工作,要把需求想清楚并细化,这是极其重要的一点.下面进行本次功能实现前的问题思考.

1、我们已经将wav文件中的采样数据提取了出来,并将每个样值转化为了一个个文本数据保存在了文件当中.然后现在我们需要将这些样值又转化为原本的wav文件.说实话,我觉得这样挺麻烦,我原本的想法直接把采样数据全部保存成二进制数据不就好了,再转化为原本的wav文件只需要把采样数据写回data区不就好了.后来询问了指导老师后,明白了这是为我软件后期功能所做的准备,因为软件核心功能是要实现能够修改wav文件的声道数,采样频率等参数,于是将数据保存为这种格式是有必要的,接下来我们需要思考一下又如何将我们保存好的文本数据重新写回data数据区呢?

2、之前我将自己提取的data区数据以一行64个采样值,每个采样值之间用空格分开的方式保存了data区的所有采样数据。我们需要将我们保存的采样值一个个先转化为二进制数据,然后再一个个写回data区就可以了。此处考虑是几周前的想法了,现在的话,我觉得使用fgets和fputs函数,一个从文件读取数据到数组里,另外一个输出到wav文件里面就好了。

存储方式:要将其最终写回到data区,首先我想提一下data区的数据采取小端序的方式存储,也就是低位数据保存在低地址上,高位保存在高地址上(具体可以查看我写的大端序和小端序的文章)。

3、测试方式:这个函数的功能实现将我们提取得到的data区数据存回原来的wav文件,可以将测试的wav文件复制一份,等data区数据回写后,用播放器播放看音乐是否相同。

函数

fgets

函数原型
char *fgets(char *str, int n, FILE *stream);

参数
str-- 这是指向一个字符数组的指针,该数组存储了读取得到的字符串。
n-- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream-- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

功能
从指定的流 stream 读取一行,并把它存储在str所指向的字符串内。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

返回值
(1ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值