[−][src]Struct ghakuf::writer::Writer
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);
Implementations
impl<'a> Writer<'a>
[src]
pub 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();
pub 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]);
pub 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);
pub 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(), });
pub 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);
pub 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);
pub 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);
pub 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);
Auto Trait Implementations
impl<'a> RefUnwindSafe for Writer<'a>
impl<'a> Send for Writer<'a>
impl<'a> Sync for Writer<'a>
impl<'a> Unpin for Writer<'a>
impl<'a> UnwindSafe for Writer<'a>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,