diff --git a/speech_pitch.py b/speech_pitch.py index a17b5b3..823c17b 100644 --- a/speech_pitch.py +++ b/speech_pitch.py @@ -5,36 +5,35 @@ import matplotlib.pyplot as plt import seaborn as sns sns.set() # Use seaborn's default style to make graphs more pretty -def pitch_array(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): + +def pm_snd(sample_file): + # sample_file = 'inputs/self-apple/apple-low1.aiff' samples, samplerate, _ = snd.read(sample_file) - sample_sound = pm.Sound(values=samples,sampling_frequency=samplerate) + return pm.Sound(values=samples,sampling_frequency=samplerate) + +def pitch_array(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): + sample_sound = pm_snd(sample_file) sample_pitch = sample_sound.to_pitch() return sample_pitch.to_matrix().as_array() def intensity_array(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): - sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff' - samples, samplerate, _ = snd.read(sample_file) - sample_sound = pm.Sound(values=samples,sampling_frequency=samplerate) + sample_sound = pm_snd(sample_file) sample_intensity = sample_sound.to_mfcc() sample_intensity.as_array().shape return sample_pitch.to_matrix().as_array() def compute_mfcc(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): - # sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff' - samples, samplerate, _ = snd.read(sample_file) - sample_sound = pm.Sound(values=samples,sampling_frequency=samplerate) + sample_sound = pm_snd(sample_file) sample_mfcc = sample_sound.to_mfcc() # sample_mfcc.to_array().shape return sample_mfcc.to_array() def compute_formants(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff' - samples, samplerate, _ = snd.read(sample_file) - sample_sound = pm.Sound(values=samples,sampling_frequency=samplerate) + sample_sound = pm_snd(sample_file) sample_formant = sample_sound.to_formant_burg() - sample_formant.x_bins() - # sample_mfcc.to_array().shape - return sample_mfcc.to_array() + # sample_formant.x_bins() + return sample_formant.x_bins() def draw_spectrogram(spectrogram, dynamic_range=70): X, Y = spectrogram.x_grid(), spectrogram.y_grid() @@ -62,10 +61,16 @@ def draw_pitch(pitch): plt.ylim(0, pitch.ceiling) plt.ylabel("pitch [Hz]") -def pm_snd(sample_file): - # sample_file = 'inputs/self-apple/apple-low1.aiff' - samples, samplerate, _ = snd.read(sample_file) - return pm.Sound(values=samples,sampling_frequency=samplerate) +def draw_formants(formant): + # Extract selected pitch contour, and + # replace unvoiced samples by NaN to not plot + formant_values = formant.to_matrix().values + pitch_values[pitch_values==0] = np.nan + plt.plot(pitch.xs(), pitch_values, linewidth=3, color='w') + plt.plot(pitch.xs(), pitch_values, linewidth=1) + plt.grid(False) + plt.ylim(0, pitch.ceiling) + plt.ylabel("Formants [val]") def plot_sample_raw(sample_file='outputs/audio/sunflowers-Victoria-180-normal-870.aiff'): @@ -111,29 +116,8 @@ def plot_sample_pitch(sample_file='outputs/audio/sunflowers-Victoria-180-normal- if __name__ == '__main__': - # sunflowers_vic_180_norm = pitch_array('outputs/audio/sunflowers-Victoria-180-normal-870.aiff') - # sunflowers_fred_180_norm = pitch_array('outputs/audio/sunflowers-Fred-180-normal-6515.aiff') - # sunflowers_vic_180_norm_mfcc = compute_mfcc('outputs/audio/sunflowers-Victoria-180-normal-870.aiff') - # fred_180_norm_mfcc = compute_mfcc('outputs/audio/sunflowers-Fred-180-normal-6515.aiff') - # alex_mfcc = compute_mfcc('outputs/audio/sunflowers-Alex-180-normal-4763.aiff') - # # # sunflowers_vic_180_norm.shape - # # # sunflowers_fred_180_norm.shape - # # alex_mfcc.shape - # # sunflowers_vic_180_norm_mfcc.shape - # # sunflowers_fred_180_norm_mfcc.shape - # from speech_spectrum import generate_aiff_spectrogram - # vic_spec = generate_aiff_spectrogram('outputs/audio/sunflowers-Victoria-180-normal-870.aiff') - # alex_spec = generate_aiff_spectrogram('outputs/audio/sunflowers-Alex-180-normal-4763.aiff') - # alex150spec = generate_aiff_spectrogram('outputs/audio/sunflowers-Alex-150-normal-589.aiff') - # vic_spec.shape - # alex_spec.shape - # alex150spec.shape - # alex_mfcc.shape - # fred_180_norm_mfcc.shape mom_snd = pm_snd('outputs/test/moms_are_engineers-7608.aiff') plot_sample_pitch('outputs/audio/sunflowers-Victoria-180-normal-870.aiff') plot_sample_pitch('inputs/self-apple/apple-low1.aiff') plot_sample_pitch('inputs/self-apple/apple-low2.aiff') plot_sample_pitch('inputs/self-apple/apple-medium1.aiff') - # pm.SoundFileFormat - # pm.Pitch.get_number_of_frames()