I'm dealing with Speech compression using CELP. And I'm having some problems.

5 views (last 30 days)
This is the code you see https://www.mathworks.com/matlabcentral/fileexchange/39038-celp-codec I take it from the source.
I converted the wavread part to audioread. I corrected the file location. The error I get when I run the code is;
Error using audioread (line 105)
Expected input to be one of these types:
char, string
Instead its type was struct.
Error in CELP_RUN (line 5)
[y, Fs] =audioread(handel);
What can I do for these errors?
% The script to run the CELP codecs: 16 kbps CELP & 9.6 kbps CELP
clc,clear;
handel.wav = 'C:\Users\user\Desktop\CELP\handel.wav';
[y, Fs] =audioread(handel);
% Taking the input data from speech file
x = audioread(hfile);
N = 160; % Frame length
L = 40; % Sub-frame length
M = 12; % Order of LP analysis
c = 0.85; % constant parameter for perceptual weighted filter
Pidx = [16 160];
% Entering into the CELP analysis-by-synthesis codec
% creating the Gaussian codebook
randn('state',0);
cb = randn(L,1024);
% invoking the CELP codecs
[xhat1, e, k, theta0, P, b] = celp9600(x,N,L,M,c,cb,Pidx);
[xhat2, e, k, theta0, P, b] = celp16k(x,N,L,M,c,cb,Pidx);
% playing all the sound files
for i = 1:3,
if(i==1),
display('Playing the original sound file...');
wavplay(x,8000);
elseif(i==2),
display('Playing the 16 kbps CELP generated sound file...');
wavplay(xhat1,8000);
elseif(i==3),
display('Playing the 9.6 kbps CELP generated sound file...');
wavplay(xhat2,8000);
end
end
% plotting all the speech profiles
figure(1)
subplot(3,1,1)
plot(x)
axis([0 7*10^4 -1 1]);
xlabel('time'); ylabel('Amplitude');
title('The original speech samples');
subplot(3,1,2)
plot(xhat1,'m')
axis([0 7*10^4 -1 1]);
xlabel('time'); ylabel('Amplitude');
title('The CELP 16 kbps synthetic samples');
subplot(3,1,3)
plot(xhat2,'c')
axis([0 7*10^4 -1 1]);
xlabel('time'); ylabel('Amplitude');
title('The CELP 9.6 kbps synthetic samples');
% comparing all the synthetic speech profiles with original speech
figure(2)
plot([x xhat1]);
axis([0 7*10^4 -1 1]);
legend('original speech','16 kbps CELP speech');
xlabel('time'); ylabel('Amplitude');
title('The comparison of original speech & 16 kbps CELP synthetic samples');
figure(3)
plot([x xhat2]);
axis([0 7*10^4 -1 1]);
legend('original speech','9.6 kbps CELP speech');
xlabel('time'); ylabel('Amplitude');
title('The comparison of original speech & 9.6 kbps CELP synthetic samples');

Accepted Answer

Walter Roberson
Walter Roberson on 13 Jan 2024
handel.wav = 'C:\Users\user\Desktop\CELP\handel.wav';
That creates a struct named "handel" with a field named "wav" that is the character vector
[y, Fs] =audioread(handel);
That asks to use the struct as the name of the file to read -- which fails because a file name is expected at that point, not a struct
What you should have done is
handel = 'C:\Users\user\Desktop\CELP\handel.wav';
  1 Comment
Mert Sari
Mert Sari on 13 Jan 2024
Thank you, I solved all the problems. When I run the code, it also gives all the graphics. I just want to listen to the audio file I'm running. How can I do that?

Sign in to comment.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!