|
- % Talkie library
- % Copyright 2011 Peter Knight
- % This code is released under GPLv2 license.
- %
- % Convert model parameter mapping into bitstream for ROM
-
- frames = csvread('tomsDinerStream.csv');
- lastFrame = [-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]; % Jumk frame
-
- repeatThreshold = 4;
-
- silentFrames = 0;
- repeatFrames = 0;
- unvoicedFrames = 0;
- voicedFrames = 0;
-
- numFrames = size(frames)(1);
-
- for f = 1:numFrames;
- frame = frames(f,:);
- % Is this a silent frame?
- if frame(1) < 1
- % Emit a silent frame
- bitEmit(0,4);
- silentFrames = silentFrames + 1;
- lastFrame = [0,0,0,0,0,0,0,0,0,0,0,0,0];
- else
- bitEmit(frame(1),4);
- coefficientDelta = sum(abs(frame(4:13)-lastFrame(4:13)));
- if coefficientDelta <= repeatThreshold
- % Emit a repeat frame
- bitEmit(1,1);
- bitEmit(frame(3),6);
- repeatFrames = repeatFrames + 1;
- lastFrame(1) = frame(1);
- lastFrame(3) = frame(3);
- else
- bitEmit(0,1);
- bitEmit(frame(3),6);
- bitEmit(frame(4),5);
- bitEmit(frame(5),5);
- bitEmit(frame(6),4);
- bitEmit(frame(7),4);
- if frame(3) < 1
- % Emit an unvoiced frame
- unvoicedFrames = unvoicedFrames + 1;
- lastFrame = frame;
- else
- % Emit a voiced frame
- bitEmit(frame(8),4);
- bitEmit(frame(9),4);
- bitEmit(frame(10),4);
- bitEmit(frame(11),3);
- bitEmit(frame(12),3);
- bitEmit(frame(13),3);
-
- voicedFrames = voicedFrames + 1;
- lastFrame = frame;
- end
- end
- end
- end
-
- % Emit a stop frame
- bitEmit(15,4);
-
- printf('Frames:\n%d V, %d U, %d R, %d S\n',voicedFrames,unvoicedFrames,repeatFrames,silentFrames);
- romSize = 50*voicedFrames + 29*unvoicedFrames + 11*repeatFrames + 4*silentFrames;
- printf('Rom size %d bits\n',romSize);
-
- % Output from this needs to be grouped into groups of 8 bits.
- % LSB of byte is the first bit to be decoded.
- % Then needs to be packaged up as a C snippet for inclusion in the libary.
|