Android 调音器开发

什么是调音器?

是一种乐器的辅助工具,用于各种弦乐器的调音,包括吉他调音器,贝斯调音器,钢琴调音器,古筝调音器,尤克里里调音器等。可根据乐音的频率判断所处的音符,从而校准改弦是否需要拧紧或者放松。

TarsosDSP接入

TarsosDSP是一个用Java编写的开源音频处理库,旨在提供音频分析和音频处理的功能。它提供了一组丰富的工具和算法,可用于音频信号的分析、转换和合成。

TarsosDSP的主要功能包括:

  1. 音频录制和播放:可以使用TarsosDSP捕获音频输入并进行实时或离线音频处理。

  2. 音频格式转换:可以将音频文件从一种格式转换为另一种格式,例如从MP3到WAV。

  3. 音频特征提取:可以提取音频信号的各种特征,如频谱、光谱包络、音高、节拍等。

  4. 音频滤波器:提供了各种滤波器,如低通、高通、带通和带阻滤波器,可用于音频信号的频率调整和去噪等任务。

  5. 音频合成:可以使用合成算法生成音频信号,如合成特定频率的波形信号或合成复杂的音乐音轨。

  6. 音频分析和处理:提供了一系列算法和工具,如FFT变换、MFCC(Mel频率倒谱系数)提取、音高估计、音频匹配等,用于音频信号的分析和处理。

TarsosDSP具有易于使用的API,使开发人员能够在自己的Java应用程序中轻松集成音频处理功能。它适用于各种应用领域,包括音频分析、音乐信息检索、音频特征提取、音频处理和合成等。

准备开发

了解了TarsosDSP的功能后,我们就可以去GitHub上找到并下载该库的最新包

地址(https://0110.be/releases/TarsosDSP/),下载完成后,将jar包依赖至我们的项目中

获取频率

音频分析需要录音的功能,在申请得到录音权限后,就可以通过TarsosDSP获取我们所需要的音频了

java 复制代码
    private static final int SAMPLE_RATE = 44100;//采样率
    private static final int BUFFER_SIZE = 4096;//每一次采样大小
    private static final int OVERLAP = 768 * 4;//重叠
    private void startAnalysis() {
        AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(SAMPLE_RATE, BUFFER_SIZE, OVERLAP);
        PitchDetectionHandler pdh = new PitchDetectionHandler() {
            @Override
            public void handlePitch(PitchDetectionResult pitchDetectionResult, AudioEvent audioEvent) {
                float pitch = pitchDetectionResult.getPitch();//获的频率
                if (pitch != -1) {
                    Log.e("TAG", "handlePitch: " + pitch);
                }

            }
        };
        AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.YIN, SAMPLE_RATE, BUFFER_SIZE, pdh);
        dispatcher.addAudioProcessor(p);
        Thread audioThread = new Thread(dispatcher, "Audio Dispatcher");
        audioThread.start();
    }

音频分析

根据TarsosDSP返回的频率,结合音程与频率的参考数据表,就可以得到当前弦所处的音符信息

音频有效的最大最小范围计算

举例几个音符的准确频率:

|----|--------|
| D# | 155.56 |
| E | 164.81 |
| F | 174.61 |

即"E"音符的最小和最大频率有效范围为:

   min = 164.81 - (164.81-155.56) / 2

   max = 164.81 + (174.61-164.81) / 2

音频准确的最大最小范围计算

"E"音符的最小和最大的准确范围为:

  minAccuracy = 164.81 - (164.81-min) / 2 * 0.1    

  maxAccuracy = 164.81 + (max-164.81) / 2 * 0.4

//0.1和0.4代表着最小和最大的准确范围计算公式

音分计算

private double accuracy = 164.81; //准确频率
private double cc = 166.00; //当前得到的频率
private static double rate = 1.0005778; //音分倍率
double cent = Math.log(accuracy / cc) / Math.log(rate); //cent为音分值(-12.4)

总结

根据得到的频率,再参考准确值的音符数据表,可得出当前处于哪个音符的有效值范围,调音器页面就可以提示用户需要拧紧或者放松,若当前频率处于准确的最大和最小范围中,即为准确音符。如需要音符的参考数据表格,欢迎评论区找我

相关推荐
SRC_BLUE_1742 分钟前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封5 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4875 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛6 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫6 小时前
Android开发中的隐藏控件技巧
android
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto
三杯温开水8 小时前
新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
android·运维·服务器