Main Content

Extract Voices from Music Signal

Implement a basic digital music synthesizer and use it to play a traditional song in a three-voice arrangement. Specify a sample rate of 2 kHz. Save the song as a MATLAB® timetable.

fs = 2e3; t = 0:1/fs:0.3-1/fs; l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94]; m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88]; h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77]; note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t); mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1; acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 0 1]+1; song = [];forkj = 1:length(mel) song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];endsong = song'/(max(abs(song))+0.1);% To hear, type sound(song,fs)tune = timetable(seconds((0:length(song)-1)'/fs),song);

OpenSignal Analyzerand drag the timetable from theWorkspace Browserto the Signal table. ClickDisplay Gridto create a two-by-two grid of displays. Add a spectrum view to the top two displays and the lower left display. Select the lower right display, clickTime-Frequencyto add a spectrogram view, and clickTimeto remove the time view. Drag the song to all four displays. Select the lower right display, and on theSpectrogramtab, specify a time resolution of0.31second (310 ms) and0% overlap between adjoining segments. Set thePower Limitsto–50dB and–10dB.

On the分析仪tab, clickDuplicate三次创建三个副本的歌。再保险name the copies ashigh,medium, andlowby double-clicking theNamecolumn in the Signal table. Move the copies to the top two and lower left displays.

Preprocess the duplicate signals using filters.

  1. Select thehighsignal by clicking its name in the Signal table. On the分析仪tab, selectHighpassfrom thePreprocessinggallery. On theHighpasstab that appears, enter a passband frequency of450Hz and increase the steepness to0.95. ClickHighpass.

  2. Select themediumsignal by clicking its name in the Signal table. On the分析仪tab, selectBandpassfrom thePreprocessinggallery. On theBandpasstab that appears, enter230Hz and450Hz as the lower and upper passband frequencies, respectively. Increase the steepness to0.95. ClickBandpass.

  3. Select thelowsignal by clicking its name in the Signal table. On the分析仪tab, selectLowpassfrom thePreprocessinggallery. On theLowpasstab that appears, enter a passband frequency of230Hz and increase the steepness to0.95. ClickLowpass.

View a spectrogram on each of the three displays containing filtered signals.

  1. 再保险move the original signal by clearing the check box next to its name.

  2. On theDisplaytab, clickTime-Frequencyto add a spectrogram view and clickTimeto remove the time view.

  3. On theSpectrogramtab, specify a time resolution of0.31second and0% overlap between adjoining segments. Set thePower Limitsto–50dB and–10dB.

Select the three filtered signals by clicking theirNamecolumn in the Signal table. On the分析仪tab, clickExportand save the signals to a MAT-file calledmusic.mat. In MATLAB, load the file to the Workspace. Plot the spectra of the three signals.

loadmusicpspectrum(low) holdonpspectrum(medium) pspectrum(high) holdoff

Figure contains an axes object. The axes object with title Fres = 1.9536 Hz contains 3 objects of type line.

% To hear the different voices, type% sound(low.low,fs), pause(5), sound(medium.medium,fs), pause(5), sound(high.high,fs)

See Also

Apps

Functions

再保险lated Examples

More About