Skip to content

Instantly share code, notes, and snippets.

View netgfx's full-sized avatar
💻
Working...

Michael Dobekidis netgfx

💻
Working...
View GitHub Profile
@netgfx
netgfx / firebase_player_assignment.js
Created December 17, 2017 13:42 — forked from anantn/firebase_player_assignment.js
Firebase: Assigning players in a multiplayer game. This snippet assigns you a spot in a game if the game isn't full yet.
function go() {
var userId = prompt('Username?', 'Guest');
// Consider adding '/<unique id>' if you have multiple games.
var gameRef = new Firebase(GAME_LOCATION);
assignPlayerNumberAndPlayGame(userId, gameRef);
};
// The maximum number of players. If there are already
// NUM_PLAYERS assigned, users won't be able to join the game.
var NUM_PLAYERS = 4;
@netgfx
netgfx / subscribe.swift
Created February 23, 2018 17:57
signal subscribe
self.onCollectionReady.subscribe(with: self) { (isReady) in
print("Are assets ready: \(isReady)")
// init player queue
self.playerQueue = AVQueuePlayer(items: self.AVItemPool)
self.playerQueue?.usesExternalPlaybackWhileExternalScreenIsActive = true
}
@netgfx
netgfx / addObservers.swift
Last active March 4, 2025 07:16
Add observers to AVPlayer
// listening for current item change
self.audioQueueObserver = self.playerQueue?.observe(\.currentItem, options: [.new]) {
[weak self] (player, _) in
print("media item changed...")
}
// listening for current item status change
self.audioQueueStatusObserver = self.playerQueue?.currentItem?.observe(\.status, options: [.new, .old], changeHandler: {
(playerItem, change) in
if playerItem.status == .readyToPlay {
var audioQueueObserver: NSKeyValueObservation?
var audioQueueStatusObserver: NSKeyValueObservation?
var audioQueueBufferEmptyObserver: NSKeyValueObservation?
var audioQueueBufferAlmostThereObserver: NSKeyValueObservation?
var audioQueueBufferFullObserver: NSKeyValueObservation?
var audioQueueStallObserver: NSKeyValueObservation?
var audioQueueWaitingObserver: NSKeyValueObservation?
self.onCollectionReady.subscribe(with: self) {
(isReady) in
print("Are assets ready: \(isReady)")
// init player queue
self.playerQueue = AVQueuePlayer(items: self.AVItemPool)
self.playerQueue?.usesExternalPlaybackWhileExternalScreenIsActive = true
}
var AVItemPool:Array<AVPlayerItem> = [] {
didSet {
if self.AVItemPool.count == trackArr.count {
self.onCollectionReady.fire(true)
}
}
}
import Foundation
import AVFoundation
import UIKit
class AudioPlayer: NSObject {
var audioItem:AVPlayerItem!
private var playerQueue : AVQueuePlayer?
// dispatch queue
let assetQueue = DispatchQueue(label: "randomQueue", qos: .utility)
let group = DispatchGroup()
var asset: AVURLAsset? {
import AVFoundation
let fileURL = NSURL(string: "https://freemusicarchive.org/file/music/ccCommunity/Rotten_Bliss/The_Nightwatchman_Sings/Rotten_Bliss_-_08_-_Timer_Erase.mp3")
let avAsset = AVAsset(url: fileURL! as URL)
let assetKeys = ["playable"]
var playerItem = AVPlayerItem(asset: avAsset, automaticallyLoadedAssetKeys: assetKeys)
var playerQueue = AVQueuePlayer(items: [playerItem])
playerQueue.play()
@netgfx
netgfx / AudioPlayer.swift
Created February 23, 2018 21:26
A basic audio player with observers and extra features. Based on AVFoundation and AVQueuePlayer
//
// AudioPlayer.swift
//
// Created by MDobekidis
//
import Foundation
import AVFoundation
import UIKit
import Signals
@netgfx
netgfx / replace-template-entry
Created May 9, 2018 11:16
Replace entry inside | | characters
var number = message.match(/\|.*?\|/g);
var newNumber = String(number).replace(/\|/g, "");
var finalText = message.replace(number, newNumber);