3000元左右听音乐为主,能买漫步者吗?
不管是耳机还是音箱,
能完成下面的测试就够了。
很多烧友习惯于向外归因, 而不是向内归因。
猎巫一般解决问题,
最终就是竹篮打水一场空。



UPDATE
2026 Hearing Test: 耳机发烧友听力测试 2026版增加波形显示以及 RUST eGUI版



下载链接
https://wenxue.ca/2026-hearing-test-update/
https://wenxue.ca/wp-content/uploads/2026/04/hearing_test_RUST-egui.zip
C GTK3 版
https://wenxue.ca/wp-content/uploads/2026/04/HLDISPLAY-binary.zip
rust GTK3 版
https://wenxue.ca/wp-content/uploads/2026/04/HLDISPLAY-binary.zip
如果缺少 DLL 文件, 这里看看
https://wenxue.ca/wp-content/uploads/2026/04/GTK3DLLS_binary.zip
2023 更新:
增加两个 C 写的 WINDOWS 工具,不用安装讨厌的 DOT NET
https://wenxue.ca/wp-content/uploads/2023/02/PA_HLtest_NO-pause_OK.zip
https://1eq.ca/wp-content/uploads/2023/02/PA_HLtest_NO-pause_OK.zip
可能需要下载的动态链接库
https://1eq.ca/wp-content/uploads/2023/02/libglib-etc-dll.zip
FOR PORTABLE USE:
https://1eq.ca/wp-content/uploads/2023/03/HL_GTK_dll_etc.zip
言归正传......
老烧见了就躲的免费高清耳朵听力曲线测试软体 -- 写给3月3国际爱耳日 【万人收藏千人点赞】

听力受损的人不是少数,这也是为什么俺不怕麻烦, 从 WHO 获取授权来转载这个联合国卫生组织的新闻稿:


本文内容采自网络, 不保留版权, 欢迎转载, 不必支付稿酬. 转载时可用 “佚名”取代作者名字, 或替换成您自己的网名即可。
看中文有困难的话, 这里有个英文的说明:

。。
前言:
我国有听力语言残疾人2057万,为残疾人总数的首位。其中7岁以下聋儿80万,由于药物、遗传、感染、疾病、环境噪声污染、意外事故等原因,每年新产生3万余名。听力障碍严重影响着这一人群的生活、学习和社会交往。针对我国耳聋发生率高、数量多、危害大,预防工作薄弱的现实,卫生部、教育部、民政部、国家计划生育委员会、国家质量技术监督局、国家药品监督管理局、国家广播电影电视总局、中华全国妇女联合会、中国老龄协会、中国残疾人联合会等10部委局共同确定:每年的3月3日为“全国爱耳日”。
音量已经调到头了, 声音还是觉得有点点轻, 不够力!! 这是典型的噪音性聋的表现。如果您觉得健康比面子重要, 不妨认真测一测。
很多老烧多年征战, 两耳听力已经废了七八成。 耳放已经是助听器的同义词。
新烧看不透这一点, 总觉得老烧的听感和自己的听感对不上号。
聚会交流时, 最好的方法就是大家用同一副知名的耳机, 相互测听力。
最后一贴出来, 金木水火土, 一目了然。

下面介绍的就是一个爱面子的老烧见了就躲的耳朵听力曲线测试组合,
如果您觉得健康比面子重要, 不妨一看。
解压第一个软件的密码如下:
密码
c r y s t a l r a d i o . c n (请去掉空格)


最先应该测试的是 1000 HZ, 别从 30 HZ 开始, 然后留言说什么都听不到。


最先应该测试的是 1000 HZ, 别从 30 HZ 开始, 然后留言说什么都听不到。
注意事项:
1. 听力检查最好到隔音的房间测试;
2. 可以请他人(配偶、儿女、亲友等)从旁帮忙的;
3. 鼠标太吵可以用触摸板、手写笔、手写屏或者(他人)隔玻璃透视窗用无线鼠。对于 IT 业人士, 那就更简单了, 用远程桌面啊。

(同时)对于新烧友来说,这也是一个最简单的法子来测出自己个性化的曲线,从此不用再被老烧忽悠。
从音源到脑子, 整个链条是这样的:
您的大脑颞叶 + 您的耳朵 + 耳机(变量)+ 耳放(如果有)
+ DAC(音频界面) + 电脑 + 本测试软体(产生 32比特 HiRES 测试波形)
= 整个链条。
当然要花费几分钟时间。
免费的耳朵测听软件 耳朵“频响“测试软件 <<<--------------------- 当烧友陷入耳朵金木之争时, 可以立判高下。 the Free Hearing Test App is here 下载点下边:
无损HI-RES耳朵测听软件耳朵频响测试软件The Free HI-RES Hearing Test App is here-◎家庭影院音频
(对, 就是上边这个下划线的链接。 戳它--下划线)
补充一个(无密码, 密码 123456789 ) 下载点: x86 cpu 绿色直接运行版 2029 5月份失效
https://wenxue.ca/wp-content/uploads/2019/05/FR01_portablex86.zip
一点安装版(HD199):
(180.65 KB, 下载次数: 1360)
2017-4-1 18:50 上传
绿色直接运行版(HD199):
(16.86 KB, 下载次数: 1751)
解压第一个软件的密码如下 密码 c r y s t a l r a d i o . c n (请去掉空格)
纯音超声次声波白噪发生器及莫尔斯码发生器训练器 【备用密码 123456789】
80 dB 真的很吵了。孩子都会受不了捂住耳朵。
测完了以后, 大概会是这样的。

您整个系统, 从音源到脑子, 整个链条的频率反应就是这条曲线。
(Photoshop 翻转 180 度啊)

您整个系统, 从音源到脑子, 整个链条的频率反应就是这条曲线。
(Photoshop 翻转 180 度啊)
看到 3000 HZ 有峰了吧?
用 EQ 压一下 (-3dB ~ -6dB)就会感觉到“暖声”了。

如果对上面的曲线存疑, 或者有耳鸣现象。
可以通过第二个测试排除疑惑, 或者确定耳鸣的存在。

*** 备注: 详细说明在这篇散文里
也就是说上面的一个免费软体如果不够用, 还有下边的莫尔斯码发生器训练器。
** 卧底的莫尔斯码是 ..- -. -.. . .-. -.-. --- ...- . .-.

纯音超声次声波白噪发生器及莫尔斯码发生器训练器 32bit192KHz <<<-------------------- 调音量以及验证老烧的听力 20KB免费小软体 下载点这个下划线的链接:
免费无损HI-RES纯音超声次声波白噪发生器及莫尔斯码发生器训练器HI-RES 32bit-◎家庭影院音频 - Powered by HD199.COM!
(对, 就是这个下划线的链接)



*** 备注: 详细说明在这篇散文里
工具免费使用和下载。
您也许需要安装微软的 dot net framework
Download .NET Framework | Free official downloads
..
音超声次声波白噪发生器及莫尔斯码发生器训练器 32bit192KHz 能干啥?
1. 可以按 dB 精细地控制 2次谐波 和 3次谐波的振幅;
~~~~~ 如果说2次谐波悦耳, 那大家可以测试一下,2次谐波到底是否悦耳。
2. 65535级音量控制;
~~~~~ 如果大师说他能听出 ppm 级的改变, 那大家可以测试一下ppm 级的音量改变,大师能否一一收货。
3. 32bit 纯音发生器, 即时产生 32比特 192 千赫兹采样的未压缩波形文件;
~~~~~ 如果大师说他能听出次声或超声, 那大家可以测试一下 32比特 192 千赫兹采样的未压缩次声或超声波形,大师能否一一收货。
4. Morse Code 训练器.
~~~~~ 如果大师说他能感知超声, 那大家可以测试一下超声的Morse Code,大师能否一一收货。
大师如果听不了很快的Morse Code, KOF 的 Morse Code 训练器 可以调出很慢很慢的码率, 确保真正的大师能一一收货。
5. 如果听力曲线那里有偏差或者作弊的情况, 来到Morse Code 训练器这里就无所遁形了。
抄写电文你中不能把 CHINA 抄成 AMERICA 吧?看出来这是杀器了吧。
还记得无间道的那句台词吗?
高音甜,中音準,低音沉。總之一句話,就是通透。。。YEAH
对了, 音量怎么调? 学过录音的同学可能都知道。 用粉红噪音。


32bit 小巧的粉红噪音发生器软件 KOF PINK NOISE GENERATOR
无损HIRES 32bit 小巧的粉红噪音发生器软件 KOF HIRES PINK NOISE GENERATOR-◎家庭影院音频

32bit 小巧的噪音催眠器软件 KOF PINK NOISE Sleep helper (可以产生32bit 的白噪音和粉红噪音)
SLEEPINK 备份链接
https://wenxue.ca/wp-content/uploads/2019/06/sleepink.zip


32bit 小巧的粉红噪音发生器软件 KOF PINK NOISE GENERATOR
NoiseGen
https://wenxue.ca/wp-content/uploads/2019/06/PINK_V1_setup.zip
如果电脑系统比较旧, 您也许需要安装微软的 dot net framework
调到你觉得合适吧。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。

听力与语言是人类相互交流和认识世界的重要手段,然而,耳病和听力障碍的阴霾却袭扰着人类。
据世界卫生组织估算,全世界有轻度听力损失者近6亿,中度以上的听力损失者2.5亿。我国有听力障碍残疾人2057万,居各类残疾之首,占全国人口的16.79‰,其中七岁以下聋幼儿可达80万,每年还将新产生聋儿3万余名。老年性耳聋有的949万,随着人口寿命增长和老龄化,老年性耳聋的人数不断增加。听力障碍严重影响着这些人的社会交往和个人生活质量。
致耳聋的因素有耳毒性药物、遗传、感染和疾病,近年来,因环境噪声污染、意外事故导致耳聋的人数逐渐增多。这一人数众多、特殊困难的残疾人群体,已引起全社会,特别是卫生部门的高度重视。全国部分城市已经成立了防聋指导小组,开展了耳聋的流行病学调查,并积极拓宽与世界卫生组织及其它国际组织的合作领域,广泛开展学术交流。卫生部组织颁发的《常用耳毒性药物临床使用规范》,对加强耳聋性药物的使用管理,减少听力语言残疾的发生将发挥重要的作用,1998年1月,卫生部、教育部、民政部、全国妇联、中国残联等有关单位的领导及在京的听力学界、特殊教育学界的知名专家进行座谈,大家一致建议由卫生部牵头,尽快确立全国“爱耳日”,加强社会宣传,普及耳聋预防和康复知识,以减少耳聋发生。
1998年3月,在政协第九届全国委员会第一次会议上,社会福利组15名委员针对我国耳聋发病率高、数量多、危害大,预防薄弱这一现实,提出了《关于建议确立爱耳日宣传活动》的第2330号提案。这一提案引起了有关部门的高度重视,经中国残疾人联合会、卫生部等10个部门共同商定,确定每年3月3日为全国爱耳日。



俺再次强调听音乐不要超过 85~90 dB SPL re 20uPa.
但是仍然有洗地的说 120dB SPL re 20uPa 才好才够, 俺是无语了。
“中耳内有两条非常小的肌肉:鼓膜张肌和镫骨肌。鼓膜张肌收缩时向前向内,使鼓膜向内运动;而镫骨肌收缩时向后向外,使镫骨足板以后缘为支点,前部向外跷起而稍离开前庭窗。 人耳在受外界声音或其它种类刺激时,可诱发中耳肌肉的反射性收缩,称为中耳肌的声反射(acoustic reflex)。在250~4000Hz范围内,正常人的镫骨肌反射阈值为70~90dB(听力级),比纯音听阈高70~90dB,同侧耳镫骨肌反射阈值平均比对侧耳低5dB。鼓膜张肌的声反射阈一般比镫骨肌反射阈高15~20dB。正常人对500Hz~1000Hz持续强声所引起的镫骨肌反射,在刺激开始后的10秒内,收缩强度无明显衰减。测定镫骨肌反射的强度与持续时间对听神经病变的早期诊断有一定价值。 当鼓膜张肌和镫骨肌收缩时,由于鼓膜的内移、听小骨之间的紧密连接、砧镫关节的移位和镫骨板的横向牵拉,使中耳劲度阻抗明显增加,可使1500Hz以下的声音衰减10dB左右。这对过量强声传入耳蜗具有一定保护作用,对刚超出安全 标准的声音起到有效预防声损伤作用。由于中耳肌反射有一定的潜伏期,因此,对突然发生的爆炸声保护作用不大。 镫骨肌反射的反射弧:声刺激经中耳达耳蜗,耳蜗毛细胞兴奋性信号经由螺旋神经节双极细胞(1级神经元)的中枢突传至耳蜗腹核(2级神经元),耳蜗腹核神经元轴突部分至同侧面神经运动核、部分至同侧上橄榄核再传至同侧和对侧面神经运动核,面神经运动核神经元的轴突形成面神经,分出镫骨肌支支配镫骨肌。因此,声刺激一侧耳可引起双侧耳的声反射。” 这段文字翻译成小学或者少年科学画报上面的语言是什么呢?那就是: 90dB SPL re 20uPa 以下的音乐您的耳朵是在享受,90dB SPL re 20uPa 以上的音乐您的耳朵是在忍受。 这段文字翻译成下流段子是什么呢?那就是: 90dB SPL re 20uPa 以下的音乐您的耳朵是被爱抚,90dB SPL re 20uPa 以上的音乐您的耳朵是被强爆。


补充阅读:
AES E-LIBRARY
On the Audibility of Non-Minimum Phase Distortion in Audio Systems
Many investigators have tried to find out, whether the human ear is able to detect phases or not. A definitive solution is not found, but it seems to be clear, that the ear in some circumstances is sensitive to phases. Our primary intention is not to continue these investigations, but to find out how phase shift in audio systems affect the quality of music. For this purpose we must know what phase shift a typical audio system has, and be able to simulate this. The results obtained will be verified by means of experiments with artificial signals.
许多研究人员都试图找出人耳是否能够检测到相位。虽然没有找到明确的解决方案,但似乎可以肯定的是,人耳在某些情况下对相位是敏感的。我们的主要目的不是继续这些研究,而是要找出音频系统中的相位偏移是如何影响音乐质量的。为此,我们必须了解典型音频系统的相移情况,并能对此进行模拟。我们将通过人工信号实验来验证所获得的结果。
Many investigators have tried to find out, whether the human ear is able to detect phases or not. A definitive solution is not found, but it seems to be clear, that the ear in some circumstances is sensitive to phases. Our primary intention is not to continue these investigations, but to find out how phase shift in audio systems affect the quality of music. For this purpose we must know what phase shift a typical audio system has, and be able to simulate this. The results obtained will be verified by means of experiments with artificial signals.
Authors: Møller, Henrik; Jensen, Eilif Bitsch
AES Convention:47 (March 1974)
PSYCHOACOUSTICS AND AUDIBILITY -FUNDAMENTAL ASPECTS OF THE HUMAN HEARING
Until recently no experiments have been reported on the audibility of the
excess phase in loudspeaker/room transfer functions. The theory of minimum
and excess phase splitting of such transfer functions will not be discussed in
detail in this section. Instead the reader should pay attention to the paper [18]
of the author published as an AES preprint in 1996. In [18] is shown that,
under certain conditions, the isolated excess phase is audible. Two listening
tests with modification filters were performed in this piece of work. The first
one showed that when extracting the excess phase part of a recorded loudspeaker/room
impulse response and imposing this on an anechoically recorded
signal, the difference between the compound and the raw unmodified signal
is indeed audible. The second listening test showed that the minimum phase
part produces some masking of the excess phase part. This result emerges from
imposing the same minimum phase part of the impulse response on both
signals in experiment one - thus yielding a signal with the entire room impulse
response and one without the excess phase part.
Two different room impulse responses were used, one from a room having
reverberation time T60 = 450 ms and one with T60 = 600 ms. Excess phase was
in both experiments more audible using the 600 ms room. Impulse response
length was also varied, 150 ms and 300 ms. Again the longer the response, the
more audible the excess phase part. In fact, the longer the impulse response,
the more excess phase will be present. Lastly, the experiments showed that
when using music as source material, the excess phase became considerably
less audible than when using male or female voices.中篇散文:

Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
Q: 我电脑的音量应该调到百分之多少呢?
A: 平时听歌是多少就调到多少. 或者用帖子里面的粉红噪音发生器,播放粉红噪。 自己决定多大的音量比较舒适。然后停止噪音。 开始测试。
风传張愛玲曾經說過「:通往男人心的路,是胃。通往女人心的路,是陰道。」
(她没说过,其实)
声音通往人心的路,是耳廓-外耳道-耳膜-锤砧镫听小骨链-卵圓窗-毛细胞-听神经-脑干-颞叶听觉中枢这一条路。从音源到脑子, 整个链条是这样的:
大脑颞叶 + 耳朵 + 耳机(换能器/DUT)+ 耳放(如果有) + DAC(音频界面) + 电脑 + 本测试软体(产生 32比特 HiRES 测试波形)= 整个链条。
俺更在乎的是整个链条的频响,从音源到脑子.

链接恢复:
免费的无损HI-RES耳朵测听软件 x86 cpu 绿色直接运行版
https://wenxue.ca/wp-content/uploads/2019/05/FR01_portablex86.zip
/////////////////////////////////////////////////////////////////////////////////////////////////
单频点测耳正弦波发生器软件 384,000 Hz 采样频率版本 (32 bit Float)
Tiny SigGen Portable (15KB) 移动版 repack
https://wenxue.ca/wp-content/uploads/2019/12/384_repack.zip
MD5:
11f83f78044c17e2abf1cd6095c7f4ed
附录:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

JavaScript: 单音波形发生器可自定义频率幅度和时间
版权授权:WTFPL
直接另存为 HTML 就可以用了, 不用安装任何软件。
可用于自测听力。
<html>
<button onclick="audPlay()"> Play Generated Tone </button>
<br>
<input type="number" id="Text_Input" value="220"> Frequency (Hz)
<br>
<input type="number" id="u_Amp" value="0.999"> High Amplitude can deafen human( Warning! )
<script>
//
// 版权授权:WTFPL
//
var o_Fr = document.getElementById("Text_Input").value;
var li_saR = 44100;
var li_Dur = 5;
var lf_amp = document.getElementById("u_Amp").value;
var lfa_sList = new Float32Array(li_saR *li_Dur);
function _myBeeP_({ m_Farr, li_saR }) {
var audioContext = new AudioContext({li_saR});
var memB = audioContext.createBuffer(1, m_Farr.length, li_saR);
memB.copyToChannel(m_Farr, 0);
var m_src = audioContext.createBufferSource();
m_src.connect(audioContext.destination);
m_src.buffer = memB;
m_src.start();
}
function audPlay() {
o_Fr = document.getElementById("Text_Input").value;
lf_amp = document.getElementById("u_Amp").value;
for (i = 0; i < lfa_sList.length; i++)
{
lfa_sList[i] = lf_amp * Math.sin(2* Math.PI *(o_Fr/li_saR) * (i%( li_saR/o_Fr )));
}
_myBeeP_({ m_Farr: lfa_sList, li_saR });
}
</script>
</html>直接另存为 HTML 就可以用了, 不用安装任何软件。
python 跨平台多谐波音调发生器可自定义频率幅度和时间带 FFT 及波形显示
授权:WTFPL

## LICENSE: WTFPL
import matplotlib.pyplot as plt
import scipy.fftpack
import numpy as np
import simpleaudio as sa
## %matplotlib inline
lf_sigFreq = 1000.0 # typical 440 Hz
lf_sigAmp = 0.99 # 0 dB
li_fsam = 44100 # 44100 samples per sec
li_durSec = 2 # Duration of li_durSec
# create a List or Array of li_durSec*sample_rate elements, from 0 to li_durSec
li_N = li_durSec * li_fsam
Lfa_el = np.linspace(0, li_durSec, li_N, False)
t_scope = np.linspace (0, 2/lf_sigFreq, 2*int(li_fsam/lf_sigFreq), False)
# Cal the element value
lf_toneV = np.sin(lf_sigFreq * Lfa_el * 2 * np.pi)*0.99 + (np.sin(3 * lf_sigFreq * Lfa_el * 2 * np.pi) )/3 + (np.sin(5 * lf_sigFreq * Lfa_el * 2 * np.pi) )/5 + (np.sin(7 * lf_sigFreq * Lfa_el * 2 * np.pi) )/7 + (np.sin(9 * lf_sigFreq * Lfa_el * 2 * np.pi) )/9 + (np.sin(11 * lf_sigFreq * Lfa_el * 2 * np.pi) )/11 + (np.sin(13 * lf_sigFreq * Lfa_el * 2 * np.pi) )/13 + (np.sin(15 * lf_sigFreq * Lfa_el * 2 * np.pi) )/15 + (np.sin(17 * lf_sigFreq * Lfa_el * 2 * np.pi) )/17
# limit amplitude in 16-bit dynamic range 2^15-1
list_el_buff = lf_sigAmp * lf_toneV *32767/ np.max(np.abs(lf_toneV))
yf = scipy.fftpack.fft(list_el_buff/32767)
# Convert to 16-bit WAVE data format
list_el_buff = list_el_buff.astype(np.int16)
# Play back
play_obj = sa.play_buffer(list_el_buff, 1, 2, li_fsam)
#
# https://stackoverflow.com/questions/34162443/why-do-many-examples-use-fig-ax-plt-subplots-in-matplotlib-pyplot-python
#
xf = np.linspace(0.0, li_fsam/2, li_N//2)
fig, ax = plt.subplots()
## nexttile
ax.plot(xf, 2.0/li_N * np.abs(yf[:li_N//2]))
plt.xlabel('Frequency [Hz]');
plt.ylabel('Amplitude [Peak]')
plt.grid()
# plt.grid()
# plt.show()
## title('Plot 1')
# nexttile
fig, ax = plt.subplots()
##ax.plot( Lfa_el, lf_toneV)
ax.plot( t_scope, lf_toneV[: (t_scope.size )])
#plt.xlabel('Time');
#plt.ylabel('Amplitude')
# title('Plot 2')
plt.grid()
plt.show()
# Wait until done and exit
play_obj.wait_done()

VSCODE: Fortran 音调发生器示例:生成及播放32比特波形文件 -- MSYS2 GFORTRAN + WINDOWS
授权: WTFPL

program generate_and_play_tone
implicit none
integer, parameter :: SAMPLE_RATE = 44100
integer, parameter :: NUM_SAMPLES = 441000
real, parameter :: SIGFREQ = 2000.0
real, parameter :: AMPLITUDE = 0.5
real, parameter :: PI = 3.14159265358979323846264
real :: time_step
integer :: i
real :: t
real, dimension(NUM_SAMPLES) :: array_of_samples
time_step = 1.0 / real(SAMPLE_RATE)
! Generate tone samples
do i = 1, NUM_SAMPLES
t = real(i - 1) * time_step
array_of_samples(i) = AMPLITUDE * sin(2.0 * PI * SIGFREQ * t)
end do
! Open file
open(unit=10, file='F32LEtone.wav', status='replace', form='unformatted', access='stream')
! Write WAV header
call write_wav_header(10, SAMPLE_RATE, NUM_SAMPLES)
! Write WAV data (Optimized)
call F32_write_wav_data(10, array_of_samples, NUM_SAMPLES)
close(unit=10)
! Playback
! Because the header is now compliant, you shouldn't need valid flags
! 'ffplay F32LEtone.wav' should work automatically.
print *, 'Tone generated. Playing...'
call system('ffplay -autoexit -showmode 1 F32LEtone.wav')
end program generate_and_play_tone
subroutine write_wav_header(unit, sample_rate, num_samples)
implicit none
integer, intent(in) :: unit
integer(kind=4), intent(in) :: sample_rate, num_samples
! --- WAVE FORMAT VARIABLES ---
! Format 3 = IEEE Float.
! Float requires an 18-byte fmt chunk (16 + 2 extra bytes for cbSize)
integer(kind=2) :: audio_format = 3
integer(kind=2) :: num_channels = 1
integer(kind=2) :: block_align
integer(kind=2) :: bits_per_sample = 32
integer(kind=2) :: cb_size = 0 ! Essential for Non-PCM formats
integer(kind=4) :: byte_rate
integer(kind=4) :: file_chunk_size
integer(kind=4) :: subchunk2_wavedata_size
integer(kind=4) :: fmt_subchunk1_size = 18 ! Changed from 16 to 18
! Calculate derived sizes
block_align = num_channels * (bits_per_sample / 8)
byte_rate = sample_rate * block_align
subchunk2_wavedata_size = num_samples * block_align
! Header size calculation:
! RIFF(4) + Size(4) + WAVE(4) + fmt(4) + fmtSize(4) + [fmt_chunk(18)] + data(4) + dataSize(4) = 46 bytes
! file_chunk_size is TotalFileSize - 8 (RIFF + Size tags)
! So: 46 - 8 + data_size
file_chunk_size = 38 + subchunk2_wavedata_size
! Write RIFF header
write(unit) 'RIFF'
write(unit) file_chunk_size
write(unit) 'WAVE'
! Write fmt subchunk
write(unit) 'fmt '
write(unit) fmt_subchunk1_size
write(unit) audio_format
write(unit) num_channels
write(unit) sample_rate
write(unit) byte_rate
write(unit) block_align
write(unit) bits_per_sample
write(unit) cb_size ! <--- The missing piece for IEEE Float
! Write data subchunk header
write(unit) 'data'
write(unit) subchunk2_wavedata_size
end subroutine write_wav_header
subroutine F32_write_wav_data(unit, samples, num_samples)
implicit none
integer, intent(in) :: unit, num_samples
real, dimension(num_samples), intent(in) :: samples
! Write the entire array at once.
! This is 100x faster than a loop.
write(unit) samples
end subroutine F32_write_wav_dataTASKS
{
"version": "2.0.0",
"tasks": [
{
"label": "Hello_FORTRAN",
"type": "shell",
"command": "C:/msys64/ucrt64/bin/gfortran.exe",
"args": [
"-g",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"${file}",
"-Wall",
"-Wextra",
"-Wextra",
"-pedantic"
//"-fbounds-check",
//"-fdiagnostics-color=always"
],
"problemMatcher": [
"$gcc"
]
}
]
}LAUNCH
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch(gdb)",
"type": "cppdbg",
"request": "launch",
"args": [
"-v"
],
"stopAtEntry": false,
"environment": [],
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"cwd": "${workspaceFolder}",
"miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe",
//"externalConsole": true,
"externalConsole": false,
"preLaunchTask": "Hello_FORTRAN",
"MIMode": "gdb"
}
]
}..
。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

“老麦, 大家都说你是‘笑话’、‘论坛孤儿’和‘神棍’。”
“没错。 只有百万分之0.5的读者赞同俺的观点。”
“老麦, 振作点,其实有万分之0.5!”
“挖, 真的有吗?”