MFCC特征提取 (ExtractMfccFeature)

Java 类名:com.alibaba.alink.pipeline.audio.ExtractMfccFeature

Python 类名:ExtractMfccFeature

功能介绍

从 Alink Tensor 格式的音频数据中提取 MFCC 特征。

参数说明

名称 中文名称 描述 类型 是否必须? 取值范围 默认值
sampleRate 采样率 采样率 Integer
selectedCol 选中的列名 计算列对应的列名 String
hopTime 相邻窗口时间间隔 相邻窗口时间间隔 Double 0.032
numMfcc mfcc参数 mfcc参数 Integer 128
outputCol 输出结果列 输出结果列列名,可选,默认null String null
reservedCols 算法保留列名 算法保留列 String[] null
windowTime 一个窗口的时间 一个窗口的时间 Double 0.128
numThreads 组件多线程线程个数 组件多线程线程个数 Integer 1

代码示例

Python 代码

DATA_DIR = "https://alink-test-data.oss-cn-hangzhou.aliyuncs.com/audio"
SAMPLE_RATE = 16000

df = pd.DataFrame([
    "246.wav",
    "247.wav"
])

source = BatchOperator.fromDataframe(df, "wav_file_path string") \
        .link(ReadAudioToTensorBatchOp()
                .setRootFilePath(DATA_DIR)
                .setSampleRate(SAMPLE_RATE)
                .setRelativeFilePathCol("wav_file_path")
                .setDuration(2.)
                .setOutputCol("tensor")
        )

mfcc = ExtractMfccFeature() \
        .setSelectedCol("tensor") \
        .setSampleRate(SAMPLE_RATE) \
        .setWindowTime(0.128) \
        .setHopTime(0.032) \
        .setNumMfcc(26) \
        .setOutputCol("mfcc")

mfcc.transform(source).print()

Java 代码

public class ExtractMfccFeatureTest {
    @Test
    public void testExtractMfccFeature() throws Exception {
        String DATA_DIR = "https://alink-test-data.oss-cn-hangzhou.aliyuncs.com/audio";
        String[] allFiles = {"246.wav", "247.wav"};
        int SAMPLE_RATE = 16000;
        BatchOperator source = new MemSourceBatchOp(allFiles, "wav_file_path")
                .link(new ReadAudioToTensorBatchOp()
                        .setRootFilePath(DATA_DIR)
                        .setSampleRate(SAMPLE_RATE)
                        .setRelativeFilePathCol("wav_file_path")
                        .setDuration(2)
                        .setOutputCol("tensor")
                );

        ExtractMfccFeature mfcc = new ExtractMfccFeature()
                .setSelectedCol("tensor")
                .setSampleRate(SAMPLE_RATE)
                .setWindowTime(0.128)
                .setHopTime(0.032)
                .setNumMfcc(26)
                .setOutputCol("mfcc");

        mfcc.transform(source).print();
    }
}