diff --git a/README.md b/README.md index 65a9b76..34fb676 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # M4ATools -A description of this package. +M4A file handling utilities diff --git a/Sources/M4ATools/M4AFile.swift b/Sources/M4ATools/M4AFile.swift index 035c74f..6ae9ee2 100644 --- a/Sources/M4ATools/M4AFile.swift +++ b/Sources/M4ATools/M4AFile.swift @@ -381,6 +381,17 @@ public class M4AFile { try data.write(to: url) } + /// Generates the data of an M4A file + /// + /// - returns: `Data` of the file + public func write() -> Data { + var data = Data() + for block in blocks { + data = block.write(data) + } + return data + } + /// Retrieves metadata of the `String` type /// /// - parameters: diff --git a/Tests/M4AToolsTests/M4AToolsTests.swift b/Tests/M4AToolsTests/M4AToolsTests.swift index 7e716f5..b1d9b91 100644 --- a/Tests/M4AToolsTests/M4AToolsTests.swift +++ b/Tests/M4AToolsTests/M4AToolsTests.swift @@ -1,6 +1,7 @@ import XCTest @testable import M4ATools +/// M4ATools tests class M4AToolsTests: XCTestCase { /// Loads a M4A file @@ -15,11 +16,9 @@ class M4AToolsTests: XCTestCase { /// Loads and then writes a M4A file func testWriteFile() { let outURL = URL(fileURLWithPath: "/tmp/foo.m4a") - let bundle = Bundle(for: type(of: self)) - let url = bundle.url(forResource: "sample-metadata", withExtension: "m4a") - + do { - let audio = try M4AFile(url: url!) + let audio = try M4AFile(data: AudioFiles.sampleMetadata) try audio.write(url: outURL) } catch { XCTFail() @@ -42,16 +41,14 @@ class M4AToolsTests: XCTestCase { /// Loads a M4A file and writes metadata func testWriteMetadata() { - let out = URL(fileURLWithPath: "/tmp/writetest.m4a") - do { var m4a = try M4AFile(data: AudioFiles.sampleMetadata) m4a.setStringMetadata(.sortingArtist, value: "Arty Artist") m4a.setIntMetadata(.gapless, value: 1) m4a.setTwoIntMetadata(.track, value: (3, 8)) - try m4a.write(url: out) + let data = m4a.write() - m4a = try M4AFile(url: out) + m4a = try M4AFile(data: data) XCTAssert(m4a.getIntMetadata(.gapless) == 1) XCTAssert(m4a.getStringMetadata(.sortingArtist) == "Arty Artist") guard let track = m4a.getTwoIntMetadata(.track) else { @@ -63,8 +60,8 @@ class M4AToolsTests: XCTestCase { XCTFail() } } - - + + /// Used by `swift test` static var allTests = [ ("Test Load File", testLoadFile), ("Test Write File", testWriteFile),