|
|
|
function [SNR, bitrate, compression] = demoAAC3(fNameIn, fNameOut, frameAACoded)
|
|
|
|
%Function that demonstrates usage of the level 3 code
|
|
|
|
% Usage [SNR, bitrate, compression] = demoAAC3(fNameIn, fNameOut, frameAACoded), where:
|
|
|
|
% Inputs
|
|
|
|
% - fNameIn is the filename and path of the file to encode
|
|
|
|
% - fNameOut is the filename and path of the wav file that will be
|
|
|
|
% written after decoding
|
|
|
|
% - frameAACoded is the filename and path of the mat file that will
|
|
|
|
% be written after encoding
|
|
|
|
%
|
|
|
|
% Output
|
|
|
|
% - SNR is the signal to noise ration computed after successively
|
|
|
|
% encoding and decoding the audio signal
|
|
|
|
% - bitrate is the bits per second
|
|
|
|
% - compression is the ratio of the bitrate before the encoding to
|
|
|
|
% the bitrate after it
|
|
|
|
|
|
|
|
AACSeq3 = AACoder3(fNameIn, frameAACoded);
|
|
|
|
|
|
|
|
totalSize = 0;
|
|
|
|
for frameIndex = 1:length(AACSeq3)
|
|
|
|
totalSize = totalSize + 2; % frameType
|
|
|
|
totalSize = totalSize + 2 * 4; % TNS coefficients
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chl.G) * 4;
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chr.G) * 4;
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chl.sfc);
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chr.sfc);
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chl.stream);
|
|
|
|
totalSize = totalSize + length(AACSeq3(frameIndex).chr.stream);
|
|
|
|
end
|
|
|
|
|
|
|
|
decodedAudio = iAACoder3(AACSeq3, fNameOut);
|
|
|
|
bitrate = totalSize / (length(decodedAudio) / 48000);
|
|
|
|
|
|
|
|
[audioData, ~] = audioread(fNameIn);
|
|
|
|
compression = (length(audioData) * 64) / totalSize;
|
|
|
|
|
|
|
|
snr(audioData(1025:length(decodedAudio)-1024, 1), audioData(1025:length(decodedAudio)-1024, 1) - decodedAudio(1025:end-1024, 1))
|
|
|
|
snr(audioData(1025:length(decodedAudio)-1024, 2), audioData(1025:length(decodedAudio)-1024, 2) - decodedAudio(1025:end-1024, 2))
|
|
|
|
SNR = snr(audioData(1025:length(decodedAudio)-1024, :), audioData(1025:length(decodedAudio)-1024, :) - decodedAudio(1025:end-1024, :));
|
|
|
|
end
|