微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Meyda功能提取的dat在命令行和通过nodejs

如何解决Meyda功能提取的dat在命令行和通过nodejs

我尝试使用Meyda提取音频文件功能。但是使用命令行meyda和通过javascript文件提取功能时,提取功能值有所不同

  1. 命令行

    meyda 1600153162.63571.wav mfcc

结果

0.057628476337413304,0.025103534166687687,-0.0033402018588145435,-0.0050914619032203364,-0.005969043107840086,-0.009452339628697326,-0.0077781823184730455,-0.0024033016732702066,-0.0033368248853514206,-0.0012372591871309979,0.00003587458735474474 1.4306079393227265,1.3713938566968262,1.2306487569743767,1.0515807610571597,0.8414768385049735,0.6060415036630535,0.37326507523088365,0.1654296077929904,-0.015392187854876595,-0.1652509593657213,-0.27571446879975764,-0.340564139593766,-0.36504384 9.282664122642018,6.880236029290547,3.3870794551074606,1.7170683624244123,-0.29657914336587826,-3.18544774959499,-4.433789386396694,-3.7101490665746217,-2.816738558429225,-2.2736417577176273,-1.6636438686466657,-0.8537746809738021-0.5116 25.65632094501052,22.93621824737729,16.08611763344924,7.490656903754756,-0.4358888007314062,-5.641656791337735,-7.229285832273481,-5.635856022395436,-2.1681330598896817,1.5575050036371694,4.296381195632149,5.45750656573637,5.0599 23.469876801827922,20.984500104582974,15.80549272827184,10.064116650359527,3.957435073588796,-1.75506262168123,-5.904087102697238,-8.29320895086182,-9.037630914839253,-8.230609293960022,-6.604159793447832,-4.8505887091185365,-3.2390390627175 29.14206006610766,25.50517483703385,19.279159148659456,13.806566615476791,7.715092034538,2.2364700767576764,-0.8129542016331001,-2.16772108652068,-2.6257181917727093,-2.1347711722007845,-1.0689231846996041,-0.6059541306434848,-0.9955650 12.251538716256618,9.479093353756676,5.26726325506769,2.7893618666871762,0.10288164291841367,-3.121859159330943,-4.446188894370852,-3.5959072906303837,-2.5699522942015007,-1.8300687753240275,-0.7140618177046422,0.3644613187160053,0.8353185065087 18.42772721964866,15.990459244575096,11.993313228734504,9.088259023158539,6.172351883886699,2.6632784721745213,-0.2683186290158647,-1.948275236251193,-2.793271841187546,-3.305172382572076,-3.6707865100252994,-3.638999985158219,15-2.8632638228 15.915610973257571,13.737073178518493,9.801934620786648,5.779403187264773,1.358952752885622,-2.5086411759816647,-5.187471901991046,-7.0034704192058985,-7.837140523422115,-7.437282553994893,-6.058991955183858,-4.360246975428396,-2.680629 15.75090683856979,13.497089898444463,9.489154494388005,5.578283842168272,1.4567586737610156,-2.141429668615224,-4.380728646793593,-5.364310654901947,-5.049848052960211,-4.214979808517224,-3.9745754014376224,-4.076571890925421,-4.020714303 23.361729244701564,20.83103985201436,16.592090051349242,12.885538444506535,8.373777248668826,2.9768227085972145,-1.399644048138661,-4.090450595665753,-5.574775136428428,-5.787457864519816,-4.693018758118676,-3.100993535744399,-1.5625546546 12.793707716744393,10.197116076581045,5.819041457288568,2.4679725003955064,-0.33041998215142393,-2.607817847380143,-4.086120143731154,-4.779218992884254,-4.374465394096245,-3.118504640745296,-1.9666020102081847,-1.5140789377241950,-1.5130130 3.2732387410942465,2.2453286293698977,0.9749483649128511,0.472715919767034,0.11249067642678866,-0.19927487640318992,-0.24286230087509772,-0.3645480814147444,-0.5060378572115204,-0.4793996411313405,-0.45934442588699886,-0.4680761055711004,-0.4680761055711004,-0.4680761055711004,-0.4680761055711004

  1. 通过档案文件

       var express = require('express');
       var app = express();
       const fs = require('fs');
       var Meyda = require('meyda');
       var load = require('audio-loader')
    
       let filename  = "1600153162.63571.wav"
       load(filename).then(function (buffer) {
       const channelData = buffer.getChannelData(0) 
       const PaddingLength = (Math.pow(2,Math.round(Math.log2(channelData.length)+1)) - channelData.length)
       let halfPaddingLength = parseInt(PaddingLength/2)
       const pad1 = new Array(halfPaddingLength).fill(0);
       const pad2 = new Array(PaddingLength - halfPaddingLength).fill(0);
       let finalBbuffer = [...pad1,...channelData,...pad2]
       console.log(finalBbuffer.length)
    
       let mfccData =  Meyda.extract('mfcc',finalBbuffer)
       console.log("mfccData : ",mfccData);
    
      });
    

结果:

[ 249.11783051490784, -90.61751411189829, -12.253094024524968, 19.88245460444982, -11.661965456271869, -14.795375019626466, 7.19298966815922, 8.362884489124907, 3.9941283332736557, -3.2158388656478287, -2.0395393071161063, -0.48849176751482837, -3.6199623273626695 ]

为什么有这种区别。如何使它们相同?

解决方法

它们是不同的,因为您在代码中填充缓冲区,而命令行工具将文件拆分为多个具有默认缓冲区大小的缓冲区,并为每个段返回 MFCC。

为了使它们相同,您可以复制 CLI 在代码中执行的缓冲区分块,而不是对整个缓冲区进行零填充,或者您可以制作一个对输入进行零填充的 CLI。如果您选择后者,我们当然有兴趣将该功能添加到捆绑的 CLI 中,因此请随时 open an issue on our issue tracker 讨论您是否走这条路并希望做出贡献。

感谢您使用 Meyda!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。