def __init__(self, dtype="discrete", limit=10000, randomize=False): if (dtype == "discrete"): gr.hier_block2.__init__(self, "source_alphabet", gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_char)) self.src = blocks.file_source( gr.sizeof_char, "source_material/gutenberg_shakespeare.txt") self.convert = blocks.packed_to_unpacked_bb(1, gr.GR_LSB_FIRST) #self.convert = blocks.packed_to_unpacked_bb(8, gr.GR_LSB_FIRST); self.limit = blocks.head(gr.sizeof_char, limit) self.connect(self.src, self.convert) last = self.convert # whiten our sequence with a random block scrambler (optionally) if (randomize): rand_len = 256 rand_bits = np.random.randint(2, size=rand_len) self.randsrc = blocks.vector_source_b(rand_bits, True) self.xor = blocks.xor_bb() self.connect(self.randsrc, (self.xor, 1)) self.connect(last, self.xor) last = self.xor else: # "type_continuous" gr.hier_block2.__init__(self, "source_alphabet", gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_float)) self.src = mediatools.audiosource_s( ["source_material/serial-s01-e01.mp3"]) self.convert2 = blocks.interleaved_short_to_complex() self.convert3 = blocks.multiply_const_cc(1.0 / 65535) self.convert = blocks.complex_to_float() self.limit = blocks.head(gr.sizeof_float, limit) self.connect(self.src, self.convert2, self.convert3, self.convert) last = self.convert # connect head or not, and connect to output if (limit == None): self.connect(last, self) else: self.connect(last, self.limit, self)
import sys; from gnuradio import gr,audio; import mediatools; sys.path.append("."); # Construct playlist pl = mediatools.strvec(["1.mp3","2.ogg"]); # Setup sample rates dac_sample_rate = 44100; file_sample_rate = 44100; default_device = ""; # Instantiate blocks tb = gr.top_block(); src = mediatools.audiosource_s(pl); s2c = gr.interleaved_short_to_complex(); c2f = gr.complex_to_float(); mc = gr.multiply_const_cc(1.0/(32768.0)); # scale to the +1 / -1 range sink = audio.sink(dac_sample_rate,default_device); # Connect up flowgraph tb.connect(src,s2c,mc,c2f); # connect src->scalar->float conversion tb.connect(c2f,sink); # connect left channel tb.connect((c2f,1),(sink,1)); # connect right channel # And go tb.run();