From 03bd3c462ac6cdcc265d491c8d5afd907f88e750 Mon Sep 17 00:00:00 2001 From: zhangyufei Date: Fri, 27 Dec 2024 15:21:54 +0800 Subject: [PATCH] feat: add progress view --- .gitignore | 88 ++++++++++++++++++ README.md | 5 + playmid.xcodeproj/project.pbxproj | 36 +++++++ .../xcshareddata/swiftpm/Package.resolved | 15 +++ .../xcshareddata/xcschemes/playmid.xcscheme | 79 ++++++++++++++++ .../xcschemes/xcschememanagement.plist | 8 ++ playmid/main.swift | 77 ++++++++++++++- screenshot.jpg | Bin 0 -> 23163 bytes 8 files changed, 304 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 playmid.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 playmid.xcodeproj/xcshareddata/xcschemes/playmid.xcscheme create mode 100644 screenshot.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31ab0ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,88 @@ +# Created by https://www.toptal.com/developers/gitignore/api/swift +# Edit at https://www.toptal.com/developers/gitignore?templates=swift + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +# End of https://www.toptal.com/developers/gitignore/api/swift diff --git a/README.md b/README.md new file mode 100644 index 0000000..c1a71a2 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# playmid + +A command line tool for MacOS which uses the system's built-in sound font assets to play **.mid** file. + +![screenshot.jpg](screenshot.jpg) diff --git a/playmid.xcodeproj/project.pbxproj b/playmid.xcodeproj/project.pbxproj index 7b7fabb..4b49547 100644 --- a/playmid.xcodeproj/project.pbxproj +++ b/playmid.xcodeproj/project.pbxproj @@ -6,6 +6,10 @@ objectVersion = 77; objects = { +/* Begin PBXBuildFile section */ + 0E80F2402D1E75BB0071F001 /* Progress in Frameworks */ = {isa = PBXBuildFile; productRef = 0E80F23F2D1E75BB0071F001 /* Progress */; }; +/* End PBXBuildFile section */ + /* Begin PBXCopyFilesBuildPhase section */ 0E80F2322D1E75090071F001 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -35,6 +39,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 0E80F2402D1E75BB0071F001 /* Progress in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -77,6 +82,7 @@ ); name = playmid; packageProductDependencies = ( + 0E80F23F2D1E75BB0071F001 /* Progress */, ); productName = playmid; productReference = 0E80F2342D1E75090071F001 /* playmid */; @@ -106,6 +112,9 @@ ); mainGroup = 0E80F22B2D1E75090071F001; minimizedProjectReferenceProxies = 1; + packageReferences = ( + 0E80F23E2D1E75BB0071F001 /* XCRemoteSwiftPackageReference "Progress.swift" */, + ); preferredProjectObjectVersion = 77; productRefGroup = 0E80F2352D1E75090071F001 /* Products */; projectDirPath = ""; @@ -248,7 +257,11 @@ 0E80F23C2D1E75090071F001 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + MACOSX_DEPLOYMENT_TARGET = 13.5; + PRODUCT_BUNDLE_IDENTIFIER = fun.padao.playmid; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; @@ -257,7 +270,11 @@ 0E80F23D2D1E75090071F001 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + MACOSX_DEPLOYMENT_TARGET = 13.5; + PRODUCT_BUNDLE_IDENTIFIER = fun.padao.playmid; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; @@ -285,6 +302,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 0E80F23E2D1E75BB0071F001 /* XCRemoteSwiftPackageReference "Progress.swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/jkandzi/Progress.swift.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.4.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 0E80F23F2D1E75BB0071F001 /* Progress */ = { + isa = XCSwiftPackageProductDependency; + package = 0E80F23E2D1E75BB0071F001 /* XCRemoteSwiftPackageReference "Progress.swift" */; + productName = Progress; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 0E80F22C2D1E75090071F001 /* Project object */; } diff --git a/playmid.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/playmid.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..73f0e31 --- /dev/null +++ b/playmid.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "ce60120d05e30c0299b79ea3b9730d3ccaf4f1d74426ac8b92d14602a0160097", + "pins" : [ + { + "identity" : "progress.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jkandzi/Progress.swift.git", + "state" : { + "revision" : "fed6598735d7982058690acf8f52a0a5fdaeb3e0", + "version" : "0.4.0" + } + } + ], + "version" : 3 +} diff --git a/playmid.xcodeproj/xcshareddata/xcschemes/playmid.xcscheme b/playmid.xcodeproj/xcshareddata/xcschemes/playmid.xcscheme new file mode 100644 index 0000000..e490695 --- /dev/null +++ b/playmid.xcodeproj/xcshareddata/xcschemes/playmid.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/playmid.xcodeproj/xcuserdata/zyf.xcuserdatad/xcschemes/xcschememanagement.plist b/playmid.xcodeproj/xcuserdata/zyf.xcuserdatad/xcschemes/xcschememanagement.plist index d38b3c4..0773a29 100644 --- a/playmid.xcodeproj/xcuserdata/zyf.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/playmid.xcodeproj/xcuserdata/zyf.xcuserdatad/xcschemes/xcschememanagement.plist @@ -10,5 +10,13 @@ 0 + SuppressBuildableAutocreation + + 0E80F2332D1E75090071F001 + + primary + + + diff --git a/playmid/main.swift b/playmid/main.swift index dbb27ce..c4f3a61 100644 --- a/playmid/main.swift +++ b/playmid/main.swift @@ -1,11 +1,80 @@ // -// main.swift -// playmid +// playmid.swift +// 使用 mac 自带的音色播放一个 mid 文件 +// play .mid file with the system sound font resources of MacOS // -// Created by 张宇飞 on 2024/12/27. +// Created by 张宇飞 on 2024/12/16. // +import AVFoundation import Foundation +import Progress -print("Hello, World!") +private func formatTime(_ seconds: TimeInterval) -> String { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.minute, .second] + formatter.unitsStyle = .positional + formatter.zeroFormattingBehavior = .pad + let formattedString = formatter.string(from: seconds) ?? "00:00" + let milliseconds = Int((seconds.truncatingRemainder(dividingBy: 1)) * 1000) + + return "\(formattedString).\(String(format: "%03d", milliseconds))" +} + +private func timeToTicks(_ secs: TimeInterval) -> Int { + let ms = Int((secs.truncatingRemainder(dividingBy: 1)) * 1000) + let s = Int(secs.rounded(.towardZero)) + return s * 1000 + ms +} + +private func parseArgs() -> URL { + let args = CommandLine.arguments + if args.count != 2 { + let p = URL(fileURLWithPath: args[0]).lastPathComponent + print("Usage: \(p) ") + exit(-1) + } + + return URL(fileURLWithPath: args[1]) +} + +private struct ProgressPlayerCursor: ProgressElementType { + let player: AVMIDIPlayer + + init(player: AVMIDIPlayer) { + self.player = player + } + + public func value(_: ProgressBar) -> String { + return formatTime(player.currentPosition) + } +} + +private func main() { + if let player = try? AVMIDIPlayer(contentsOf: parseArgs(), soundBankURL: nil) { + var running = true + player.play { + running = false + } + + let totalTicks = timeToTicks(player.duration) + let duration = formatTime(player.duration) + var bar = ProgressBar( + count: totalTicks, + configuration: [ + ProgressPlayerCursor(player: player), + ProgressBarLine(barLength: 60), + ProgressString(string: duration), + ]) + + while running { + let ticks = timeToTicks(player.currentPosition) + bar.setValue(ticks) + usleep(500_000) + } + bar.setValue(totalTicks) + } +} + +main() diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..212a78c55728e3bfe4d00eb25fa8e71b4f129d7f GIT binary patch literal 23163 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 literal 0 HcmV?d00001