Struct ghakuf::writer::Writer
[−]
[src]
pub struct Writer<'a> { /* fields omitted */ }
ghakuf
's SMF builder.
This builds SMF by Message enums and write out. Message enum consists of MetaEvent, MidiEvent, SysExEvent, and TrackChange. You can use running status if you want. At track change, you should use not only MetaEvent::EndOfTrack message, but also TrackChange message.
Examples
use ghakuf::messages::*; use ghakuf::writer::*; use std::path; let path = path::Path::new("tests/writer_doctest.mid"); let tempo: u32 = 60 * 1000000 / 102; //bpm:102 let mut messages: Vec<Message> = vec![ Message::MetaEvent { delta_time: 0, event: MetaEvent::SetTempo, data: [(tempo >> 16) as u8, (tempo >> 8) as u8, tempo as u8].to_vec(), }, Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), }, Message::TrackChange, Message::MidiEvent { delta_time: 0, event: MidiEvent::NoteOn { ch: 0, note: 0x3c, velocity: 0x7f }, }, Message::MidiEvent { delta_time: 192, event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 }, }, Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), } ]; let mut writer = Writer::new(); writer.running_status(true); for message in &messages { writer.push(&message); } writer.write(&path);
Methods
impl<'a> Writer<'a>
[src]
fn new() -> Writer<'a>
[src]
Builds Writer with initial value.
Writer's member | type | initial value |
---|---|---|
messages | Vec<&'a ghakuf::messages::Message> | Vec::new() |
format | ghakuf::formats::Format | ghakuf::formats::Format::F1 |
time_base | u16 | 480 |
running_status | bool | false |
Examples
use ghakuf::writer::Writer; let writer: Writer = Writer::new();
fn messages(&self) -> &Vec<&'a Message>
[src]
Returns keeping messages by borrowing.
Examples
use ghakuf::messages::Message; use ghakuf::writer::Writer; let message = Message::TrackChange; let mut writer: Writer = Writer::new(); writer.push(&message); assert_eq!(*writer.messages(), vec![&message]);
fn push(&mut self, message: &'a Message)
[src]
Pushes message to writer.
Examples
use ghakuf::messages::{Message, MidiEvent}; use ghakuf::writer::Writer; let message = Message::MidiEvent { delta_time: 0, event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 }, }; let mut writer: Writer = Writer::new(); writer.push(&message);
fn remove(&mut self, index: usize) -> &'a Message
[src]
Removes message from writer.
Examples
use ghakuf::messages::{Message, MetaEvent, MidiEvent}; use ghakuf::writer::Writer; let mut messages_a: Vec<Message> = vec![ Message::MidiEvent { delta_time: 0, event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 }, }, Message::TrackChange, Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), } ]; let mut writer: Writer = Writer::new(); for message in &messages_a { writer.push(&message); } writer.remove(1); assert_eq!(*writer.messages()[0], Message::MidiEvent { delta_time: 0, event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 }, }); assert_eq!(*writer.messages()[1], Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), });
fn format(&mut self, format: u16) -> &mut Writer<'a>
[src]
Sets SMF format value (Format 0, Format 1 or Format 2) by formats::Format::*.
Examples
use ghakuf::writer::Writer; let mut writer: Writer = Writer::new(); writer.format(0);
fn time_base(&mut self, time_base: u16) -> &mut Writer<'a>
[src]
Sets SMF time base value.
Examples
use ghakuf::writer::Writer; let mut writer: Writer = Writer::new(); writer.time_base(960);
fn running_status(&mut self, running_status: bool) -> &mut Writer<'a>
[src]
Sets bool value whether you adopt running statusor not.
Examples
use ghakuf::writer::Writer; let mut writer: Writer = Writer::new(); writer.running_status(true);
fn write(&self, path: &Path) -> Result<(), Error>
[src]
Writes out SMF messages you stored.
Examples
use ghakuf::messages::*; use ghakuf::writer::*; use std::path; let path = path::Path::new("tests/writer_write_doctest.mid"); let tempo: u32 = 60 * 1000000 / 102; //bpm:102 let mut messages: Vec<Message> = vec![ Message::MetaEvent { delta_time: 0, event: MetaEvent::SetTempo, data: [(tempo >> 16) as u8, (tempo >> 8) as u8, tempo as u8].to_vec(), }, Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), }, Message::TrackChange, Message::MidiEvent { delta_time: 0, event: MidiEvent::NoteOn { ch: 0, note: 0x3c, velocity: 0x7f }, }, Message::MetaEvent { delta_time: 0, event: MetaEvent::EndOfTrack, data: Vec::new(), } ]; let mut writer = Writer::new(); for message in &messages { writer.push(&message); } writer.write(&path);