diff --git a/bin/data/Roboto-SemiBold.ttf b/bin/data/Roboto-SemiBold.ttf new file mode 100644 index 0000000..3f34834 Binary files /dev/null and b/bin/data/Roboto-SemiBold.ttf differ diff --git a/bin/data/cambria.ttc b/bin/data/cambria.ttc new file mode 100644 index 0000000..b971a3f Binary files /dev/null and b/bin/data/cambria.ttc differ diff --git a/bin/data/text/contemp-macbeth.json b/bin/data/text/contemp-macbeth.json new file mode 100644 index 0000000..0555ca2 --- /dev/null +++ b/bin/data/text/contemp-macbeth.json @@ -0,0 +1,1046 @@ +[ + { + "first_speaker": "BANQUO", + "first_text": "He joins us today following a visit, as you all know so well, and we discussed earlier, on Monday to Israel where he met with the prime minister there and the president of Israel. And we’re going to talk about everything. And my hope is that we can talk about how he thinks about his influence, about his power, about all of it, and we’re going to talk about innovation and everything else. I want to say just two other things real quick" + }, + { + "first_speaker": "MACBETH", + "first_text": "Sure" + }, + { + "first_speaker": "BANQUO", + "first_text": "We met each other for the first time 16 years ago." + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah, it’s a long time" + }, + { + "first_speaker": "BANQUO", + "first_text": "It’s been a long time. And-" + }, + { + "first_speaker": "MACBETH", + "first_text": "Oldest kids were three." + }, + { + "first_speaker": "BANQUO", + "first_text": "When we first met, I think you were just about to deliver your first Roadster. I don’t think you had yet. Larry Page was still waiting to get one." + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah, that’s a bit like 2007" + }, + { + "first_speaker": "BANQUO", + "first_text": "2007, 2008. And I remember-" + }, + { + "first_speaker": "MACBETH", + "first_text": "Roadster was a little bit 2008" + }, + { + "first_speaker": "BANQUO", + "first_text": "I remember going back to the newsroom and saying, “I think I just met the next Steve Jobs.” And I’m going to hold to that, I’m going to hold to that. But a lot has happened between when I first met you and now. You came to DealBook." + }, + { + "first_speaker": "MACBETH", + "first_text": "It’s been boring, that’s for sure. Wait, actually, technically I do have a boring company." + }, + { + "first_speaker": "BANQUO", + "first_text": "2012, you came to DealBook and sat on this stage and we’re thrilled to have you back, but there’s been so much that’s happened between now and then and there’s been so much that’s happened in the past week, week and a half. And a lot of folks, and I want to tell you this, a lot of folks called me up and said, you really going to host Elon Musk here? Can you believe what he just said on X?" + }, + { + "first_speaker": "MACBETH", + "first_text": "No idea what this Twitter thing is you keep talking about." + }, + { + "first_speaker": "BANQUO", + "first_text": "Should you platform him? That’s what they said. Should you platform him? Then I said that I think that it’s our role and I know you have issues with journalists." + }, + { + "first_speaker": "MACBETH", + "first_text": "I have a platform" + }, + { + "first_speaker": "BANQUO", + "first_text": "I know you have an issue with journalists oftentimes, but I said it’s our role to have conversations and to inquire and sometimes even interrogate ideas and I’m hoping we can do that. So I want to start just so we can begin this conversation and just level set, take us through everything that happened if you could" + }, + { + "first_speaker": "MACBETH", + "first_text": "Everything?" + }, + { + "first_speaker": "BANQUO", + "first_text": "No, over the past week and a half." + }, + { + "first_speaker": "MACBETH", + "first_text": "How long have you got?" + }, + { + "first_speaker": "BANQUO", + "first_text": "We’ve got the time." + }, + { + "first_speaker": "MACBETH", + "first_text": "Okay." + }, + { + "first_speaker": "BANQUO", + "first_text": "You send out a post or an X or a tweet. I don’t know what you want to describe it as." + }, + { + "first_speaker": "MACBETH", + "first_text": "I’m trying to change… When things were just 140 characters, it made sense to call them a tweet because a bunch of little bit chirping, but point in which you can put three-hour videos on, it’s a very long tweet" + }, + { + "first_speaker": "BANQUO", + "first_text": "So here we are" + }, + { + "first_speaker": "MACBETH", + "first_text": "This is more descriptive I think." + }, + { + "first_speaker": "BANQUO", + "first_text": "And at some point, I don’t know where you were, but you write in responding to another tweet, “This is the actual truth,” and it’s set off a firestorm of criticism all the way to the White House, and then you make this trip to Israel. You have advertisers who’ve left the platform, people calling you-" + }, + { + "first_speaker": "MACBETH", + "first_text": "Well, the trip to Israel is independent of… It wasn’t some apology tour. I want to be clear. That was-" + }, + { + "first_speaker": "BANQUO", + "first_text": "Let’s talk about that. But just take us back to the moment at which you write that" + }, + { + "first_speaker": "MACBETH", + "first_text": "Trip to Israel is independent of… It wasn’t in response to that at all." + }, + { + "first_speaker": "BANQUO", + "first_text": "We’ll do Israel in just a moment" + }, + { + "first_speaker": "MACBETH", + "first_text": "And I have no problem being hated by the way." + }, + { + "first_speaker": "BANQUO", + "first_text": "I hear you-" + }, + { + "first_speaker": "MACBETH", + "first_text": "Hate away." + }, + { + "first_speaker": "BANQUO", + "first_text": "Well, but you know what, let’s go straight to that then for a second. Because there is an idea and you could say that-" + }, + { + "first_speaker": "MACBETH", + "first_text": "I think it’s a real weakness to want to be liked, a real weakness. I do not have that." + }, + { + "first_speaker": "BANQUO", + "first_text": "Let me ask you this then. There’s a difference between saying, I don’t care if anyone likes me or they hate me. But given your power and given what you have amassed and the importance you have, I would think you want to be trusted. I would think maybe you don’t need to be liked or hated, but trusted matters. If X is going to become a financial platform where people are going to put their money, where the government’s going to give you money for rockets, people are going to get into the cars. They need to ultimately decide that you are… They don’t have to say that they love you, but that you are ultimately a decent and good human being." + }, + { + "first_speaker": "MACBETH", + "first_text": "Yes. I mean, I think I am, but I’m certainly not going to do some sort of tap dance to prove to people that I am. So as for trust, I mean I think we break that down in a few ways. If you want satellites sent to orbit reliably, SpaceX will do 80% of all mass to orbit this year. China will do 12%. The rest of the world will do eight. That includes Boeing, Lockheed, and everyone else. So the track record of the rocket is the best by far of anything. You could hate my guts. You could not trust me. It is irrelevant. The rocket track record speaks for itself. With respect to Tesla, we make the best cars. Whether you hate me, like me or indifferent, do you want the best car or do you not want the best car? So I will certainly not pander. And Jonathan, the only reason I’m here is because you are a friend. What was my speaking fee?" + }, + { + "first_speaker": "BANQUO", + "first_text": "You’re not making any… First of all, I’m Banquo, but-" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah, sorry." + }, + { + "first_speaker": "BANQUO", + "first_text": "It’s okay. Second of all, we’ve known each other for a very long time." + }, + { + "first_speaker": "MACBETH", + "first_text": "I’ve spoken. Yes. Listen, what I’m trying to illustrate is that sometimes I say the wrong thing." + }, + { + "first_speaker": "BANQUO", + "first_text": "I think there are a lot of people who are tired, but let me go back." + }, + { + "first_speaker": "MACBETH", + "first_text": "No. No. You should hear the sketches that SNL wouldn’t post, by the way. Those are really good." + }, + { + "first_speaker": "BANQUO", + "first_text": "And I would say unfortunately, or fortunately or unfortunately, whatever friendship we have, not great. We don’t talk that much, but let me ask you this. It’s true. That’s true." + }, + { + "first_speaker": "MACBETH", + "first_text": "Where am I?" + }, + { + "first_speaker": "BANQUO", + "first_text": "Doesn’t return the phone calls" + }, + { + "first_speaker": "MACBETH", + "first_text": "I’m here because you’re a friend, not because I’m being payable because I need any validation or anything, is that we’ve been friends for 16 years and I promise you I’d be here and that’s why I’m here." + }, + { + "first_speaker": "BANQUO", + "first_text": "Well, I appreciate you being here" + }, + { + "first_speaker": "MACBETH", + "first_text": "Not for any other reason." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LENNOX", + "first_text": "In the U.S., the sentencing of the 2018 Pittsburgh Tree of Life synagogue shooter and the arraignment of the former president for his role in the conspiracy and riots of 6 January 2021 dominated the news in early August 2023. As both incidents were partly inspired, planned, and documented in extremist networks on social media, public reflections about such events should rekindle questions about the role of social media in extremist radicalization in American public life." + }, + { + "first_speaker": "ANGUS", + "first_text": "Many would blame social media platforms—in particular, their algorithms that sort and recommend content—for the spread of extremist ideas. However, empirical evidence, including a study of YouTube led by Annie Y. Chen in this issue of Science Advances, reveals a more complex reality (1). The platforms and their algorithms rarely recommend extremist content, yet they remain powerful tools for those who hold extremist beliefs. Radicalized users can still use social media to access and disseminate ideas, build solidarity, or plan and publicize egregious acts. Indeed, despite efforts to remove or reduce the visibility of extremist content, social media platforms like YouTube continue to provide a hospitable environment for content espousing violence, hate, and conspiracist thinking of various kinds" + }, + { + "first_speaker": "LENNOX", + "first_text": "Critical accounts of the ills wrought by social media have become commonplace, but the details are still important. YouTube, launched in 2005 and acquired by Google (now Alphabet) in 2006, is one of the most popular social media platforms in the United States (2). YouTube’s recommendation algorithms, which drive massive amounts of content consumption on the site, have a notorious reputation for surfacing hate speech, unfounded rumors, misinformation, hoaxes, and conspiracies. The platform’s recommendations, so the story goes, expose casual users to extremist content, nudging them down “rabbit holes” of (usually right wing) radicalization." + }, + { + "first_speaker": "ANGUS", + "first_text": "The rabbit holes narrative gained traction in the wake of the 2016 U.S. presidential election. Breathless observers, exemplified by a 2018 op-ed by Zeynep Tufekci in The New York Times (3), proclaimed YouTube “the great radicalizer” and argued that its recommendation tools “may be one of the most powerful radicalizing instruments of the 21st century.” This Alice in Wonderland vision of innocents undergoing extremist-contagion-via-algorithms reflects a mix of fantasy and fear typical of moral panics over technology. Such talk also entails a crude, outdated theory of direct media effects. Just exposing someone to media that espouse far-out ideas is unlikely to change their perspective. Deeply held views are not like air-borne illnesses that spread in a few breaths. Rather, contagions of behavior and beliefs are complex, requiring reinforcement to catch on" + }, + { + "first_speaker": "LENNOX", + "first_text": "Nevertheless, the visions of rabbit holes, supported by little more than anecdotes, may have been more accurate prior to 2019, when YouTube introduced changes to render extremist content less visible (5). Scant empirical evidence was published until several years later (YouTube held but did not release data that could have supported independent tests). Other platforms, including Facebook, Reddit, and X (formerly Twitter), likewise expanded moderation strategies in response to mounting criticism for their role in hosting hate speech, incivility, and worse. Many of the interventions reduced hateful and dangerous content [e.g., (6)]. In other words, the social media platforms and society are far from helpless in the face of an upsurge of hateful and uncivil content but, instead, are increasingly well equipped to identify it and minimize its reach." + }, + { + "first_speaker": "ANGUS", + "first_text": "The new study led by Chen in collaboration with Brendan Nyhan, Jason Reifler, Ronald E. Robertson, and Christo Wilson finds that exposure to alternative and extremist YouTube videos happens among users who already hold resentful attitudes about race and gender and who seek out this content via channel subscriptions and referrals from other sites. Such sites include fringe social media platforms like Parler and Gab, both of which embrace radically permissive content policies and extremist political movements. By contrast, algorithmic recommendations within YouTube generate a very small amount of the traffic to alternative and extremist content. In this last respect, the findings echo a recent piece in Proceedings of the National Academy of Sciences that first documented the scarcity of rabbit hole events among YouTube users (7). A key contribution of Chen and colleagues consists of matched survey and web browsing data, which allows them to disentangle the relationships between online behavior and prior beliefs. Doing so shows that consumers of alternative and extremist content previously espoused extremist beliefs. The study cannot rule out the possibility that these individuals acquired their extremist views via YouTube recommendations prior to 2019, but, at some point, we should recall that violent extremism has a deeply entrenched history in American society that pre-dates social media" + }, + { + "first_speaker": "LENNOX", + "first_text": "The fact that a substantial proportion of the consumers of extremist content on YouTube arrived from other, extremist sites also speaks to a distinct, pernicious—and empirically documented—role of social media in the contemporary epidemic of extremist violence in the U.S. Participation in extremist online spaces correlates with increased participation in subsequent incidents of extremist civil unrest (9). Thankfully, most such incidents are neither mass shootings nor electoral malfeasance, but both help illustrate the pattern. The Tree of Life shooter appears to have engaged with violent antisemitic groups online. The perpetrators of the January 6 debacle coordinated across various platforms and communities. Engaging with and contributing to communities of like-minded extremists may not have caused these individuals to adopt such radicalized beliefs in the first place, but the social support that they found online may have catalyzed them to adopt even more extreme views and to take actions they once might have considered taboo. Future research should continue to pull at these threads." + }, + { + "first_speaker": "ANGUS", + "first_text": "Meanwhile, the terrain of social media use and governance remains fraught. Online ecosystems have fragmented as younger users and others have congregated in newer platforms like TikTok or decentralized environments like Mastodon. More polarized and more misinformation-suffused right wing media sources had greater visibility and engagement on Facebook around the 2020 election (10). Platform safeguards put in place around the 2020 election to prevent the spread of misinformation online have been weakened ahead of 2024. Elon Musk has dismantled most of the trust and safety infrastructure of X and appears to hold deeper commitments to extremist speech than civility. Republican Ohio Representative and House Judiciary Committee Chair Jim Jordan has launched a burdensome, evidence-optional inquisition into the conduct of social media companies and academic researchers who sought to protect electoral integrity in 2020. Jordan has targeted, among others, Kate Starbird of the University of Washington, whose primary faults seem to have been working for over a decade to identify dangerous rumors in social media and sharing findings with interested parties (11). The adoption of large language models and generative AI tools will bring new challenges and disruptions" + }, + { + "first_speaker": "LENNOX", + "first_text": "The turbulent context is part of what makes Chen and colleagues’ work important. The science of algorithmic recommendation systems, content moderation, and digital media must continue to evolve quickly. We must continue to investigate the means by which ideas that threaten public safety and institutional integrity spread, take hold, and endanger lives." + }, + { + "first_speaker": "ANGUS", + "first_text": "The platforms present a moving target. Just because they do not incidentally expose visitors to radical extremist content today does not mean that they never did or that they will not do so again. Furthermore, Chen and colleagues’ study confirms that platforms like YouTube can, and should, do much more to restrict the reach of extremist content to the dedicated audiences that seek it out. At a minimum, YouTube and its parent Alphabet should divest from revenue generating activities related to content that contradicts their public commitments (12) to reduce the spread of hate speech, harassment, and harmful conspiracy theories." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACBETH", + "first_text": "Rate my stack, here look" + }, + { + "first_speaker": "DUNCAN", + "first_text": "What have you got. That’s a fat stack" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah, yeah" + }, + { + "first_speaker": "DUNCAN", + "first_text": "What’s that, you got some creatine there?" + }, + { + "first_speaker": "MACBETH", + "first_text": "I got some creatine in there yeah. I got zinc, magnesium obviously" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Obviously" + }, + { + "first_speaker": "MACBETH", + "first_text": "Fish oils, omega 3s in there, vitamin D" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Ashwaganda?" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah" + }, + { + "first_speaker": "DUNCAN", + "first_text": "I agree with all of this. Magnesium has changed my life" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah it was a shock. I’m like five years younger" + }, + { + "first_speaker": "DUNCAN", + "first_text": "That’s insane" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LENNOX", + "first_text": "So one of my guy friends gave me permission to make a hinge account for him because I was telling him how easy dating is with dating apps, and he was telling me that it’s incredibly difficult. And I was like Pete, you must be doing something wrong. And he gave me permission to create an account for him and just run the account. I’ve been a virtual boy for three days and I’ve, I’ve never felt this bad about myself." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "I would like to choose to believe that there is no difference between a man and a woman - that a woman is capable of the same extremes of violence, the same prejudices or lack thereof. I do not think that there is anything particular that makes a woman a woman and a man a man. There are personalities, neuroses, fetishes, beliefs and disappointments, I am he and he is me, we happen to be who we are but it is only that, chance, that stands between us.\n\nIt is a costume. It is only a costume. But one that has obscene effect on the wearer" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACDUFF", + "first_text": "I guarantee the majority of the population doesn't even know what MK Ultra is." + }, + { + "first_speaker": "MALCOLM", + "first_text": "When the CIA would test acid on unsuspecting prostitute customers in SF in the 60s-70s right? MK Ultra dealt with possible psychics too right? Mostly was going to be used to spy on the USSR?" + }, + { + "first_speaker": "MACDUFF", + "first_text": "I think you are off a little. It was the 50s and 60s." + }, + { + "first_speaker": "LENNOX", + "first_text": "Kind of. I was talking more specifically the Bay Area, CA. Primarily San Francisco. I heard they would bug prostitute houses, give the customers acid and then see what happens through a two way mirror." + }, + { + "first_speaker": "MALCOLM", + "first_text": "Sheep to the slaughter" + }, + { + "first_speaker": "MACDUFF", + "first_text": "I knew about it but until Unabomber I didn't research it. Seriously fucked up stuff." + }, + { + "first_speaker": "LENNOX", + "first_text": "MKU isnt that scary but the choice of words are.... Words in the media can do more harm and can give you a false perspective that will fit their needs. In some form or way we all mind controlled" + }, + { + "first_speaker": "MALCOLM", + "first_text": "Anyone who has ever taken LSD is now a part of mk ultra." + }, + { + "first_speaker": "MACDUFF", + "first_text": "Nah, MK is about using LSD to influence the participants perception - see the agenda.\nTaking it by yourself is more like facing all the fucking bloatware you’ve had ingrained in you since day one." + }, + { + "first_speaker": "LENNOX", + "first_text": "LSD was a small portion of the program. Many drugs were experimented with, as well as forms of torture" + }, + { + "first_speaker": "MACDUFF", + "first_text": "It is the continuation of experiments carried on by the (((Nazis&Bolsheviks)))." + }, + { + "first_speaker": "LENNOX", + "first_text": "Your use of antisemitic triple parenthesis is cowardly and stupid." + }, + { + "first_speaker": "MALCOLM", + "first_text": "Lol then what are people who smoke DMT" + }, + { + "first_speaker": "LENNOX", + "first_text": "Bro they’re obviously the inter dimensional drill Sargents facilitating it all." + }, + { + "first_speaker": "MALCOLM", + "first_text": "MK Uber" + }, + { + "first_speaker": "MACDUFF", + "first_text": "Never could break through on my homemade batch, really wanna give it another go one day" + }, + { + "first_speaker": "LENNOX", + "first_text": "It's more about perception and behavior modification than LSD, or any drug really. The newer techniques are more focused on exploiting a person's senses as well as using different forms of directed energy in order to modify their beliefs/behavior" + }, + { + "first_speaker": "MALCOLM", + "first_text": "Obviously taking a tab or two in a nice setting while consenting isn’t like being IV fed LSD until you have a mental breakdown" + }, + { + "first_speaker": "MACDUFF", + "first_text": "MK Ultra ultimately showed that bribing people is way easier than drugging them" + }, + { + "first_speaker": "LENNOX", + "first_text": "Life revolves around money" + }, + { + "first_speaker": "MACDUFF", + "first_text": "CREAM" + }, + { + "first_speaker": "MALCOLM", + "first_text": "GET THE MONEY" + }, + { + "first_speaker": "MACDUFF", + "first_text": "DOLLAR DOLLAR BILL Y'ALL" + }, + { + "first_speaker": "LENNOX", + "first_text": "The secret quest for better ways to control and manipulate people, both individually and en-mass in order to get them to do things that they would otherwise never think of, much less do, will always find some new name and more than enough government funding from one government agency or department or another to pay for it.\nThe US government is already entertaining the idea of burying black-ops budgets under phoney expenses for other better known and benign government departments and agencies to keep what they are for and what they actually cost from ever being publicly discovered or known.\nThat they would even think of much less approve of such a devious and quite illegal, (for anyone else that is), ways to hide and misrepresent how and in what ways the taxpayers money is actually being spent is a pretty strong indication of how very little regard it has for the general public or it's obligation to be honest and forthright about what it does in their name and with their taxdollars" + }, + { + "first_speaker": "DUNCAN", + "first_text": "While doing research on historic architecture, I came across a story of an orphan boy. He was an experiment at a local church. Two clergy men used him as a servant, gave him experimental drugs, and lived with him. One day, the boy hacked them up in the courtyard. This boy is now a man, and now free. He even had a video made about his new halfway house digs in Denver.\nA guy at the local tavern told me they would confine him to a box at night. Before dawn, they would drop rattlesnakes into his cage, to terrify him." + }, + { + "first_speaker": "LENNOX", + "first_text": "you had me till rattle snakes. ain't no fucking way" + }, + { + "first_speaker": "DUNCAN", + "first_text": "The guy that told me was legit. I live in a small town, where people don't lie about weird stuff. Also, the practice of using snakes for torture is still used" + }, + { + "first_speaker": "ANGUS", + "first_text": "Navy Veteran here, these projects never end they just go deeper into the deep dark places. Remember the CIA is allowed to own for profit front companies so a lot of this stuff is self funding." + }, + { + "first_speaker": "LENNOX", + "first_text": "I don't imagine that once a government/military starts doing tests like these that they'd ever stop. Someone's probably testing different drugs/technologies on people at this very moment" + }, + { + "first_speaker": "ANGUS", + "first_text": "Totally agree" + }, + { + "first_speaker": "MALCOLM", + "first_text": "why MK at the start of all these names?" + }, + { + "first_speaker": "ANGUS", + "first_text": "Mind Kontrol" + }, + { + "first_speaker": "MALCOLM", + "first_text": "I knew someone would say that" + }, + { + "first_speaker": "MACDUFF", + "first_text": "Mortal Kombat" + }, + { + "first_speaker": "MALCOLM", + "first_text": "Okay" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACBETH", + "first_text": "Maybe the problem is that there’s not enough blood in this. In this life. So we" + }, + { + "first_speaker": "BANQUO", + "first_text": "Yeah" + }, + { + "first_speaker": "MACBETH", + "first_text": "We go out, we need it" + }, + { + "first_speaker": "BANQUO", + "first_text": "I think there’s something to it" + }, + { + "first_speaker": "MACBETH", + "first_text": "We spend a lot of time, I mean most of us" + }, + { + "first_speaker": "BANQUO", + "first_text": "Just like" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah just, in this nothing, sort of, existence" + }, + { + "first_speaker": "BANQUO", + "first_text": "Not in our bodies" + }, + { + "first_speaker": "MACBETH", + "first_text": "Haha. Yes. Kind of, I mean" + }, + { + "first_speaker": "BANQUO", + "first_text": "Not touching anything. Not doing what we were designed for" + }, + { + "first_speaker": "MACBETH", + "first_text": "And that does something, you know? I think it does something. To people. To us" + }, + { + "first_speaker": "BANQUO", + "first_text": "I’ve got a son, man, you know, a kid" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah. Yeah" + }, + { + "first_speaker": "BANQUO", + "first_text": "And when he was a toddler you gotta, you really have to, I’d take him out you know and I would just run him. Like let him run" + }, + { + "first_speaker": "MACBETH", + "first_text": "Like a dog" + }, + { + "first_speaker": "BANQUO", + "first_text": "Haha. Yeah, because he needs it. And he knows he needs it. And we don’t - I mean I go to the gym" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah I go to the gym" + }, + { + "first_speaker": "BANQUO", + "first_text": "We all go to the gym. But it’s - even that isn’t an instinct anymore. I’m like watching - I’m googling how to make RDL target quads more or something like - what supplements to take, how much creatine you know?" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah" + }, + { + "first_speaker": "BANQUO", + "first_text": "And I just feel like" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah" + }, + { + "first_speaker": "BANQUO", + "first_text": "Something isn’t working out" + }, + { + "first_speaker": "MACBETH", + "first_text": "Yeah" + }, + { + "first_speaker": "BANQUO", + "first_text": "You know?" + }, + { + "first_speaker": "MACBETH", + "first_text": "And then you go. You sort of go. Kind of crazy." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "One of the things you hear a lot is how is this feminist becoming this radicalised right wing anti vaxxer? But this is one of the central pillars of like the new forms of radicalisation that are happening on the right, is that they’re ideologically totally incoherent" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Uh huh" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "What it seems to be is that people are starting with personal grievances, and then backfilling like whatever ideology they need basically to justify them." + }, + { + "first_speaker": "DOCTOR", + "first_text": "Uh huh. Yeah" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "So there’s a report that compares the Orlando Pulse shooter and the Christchurch gunman" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Yeah" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "And this guy from the FBI says they seem to have both been drifting through life while they shopped for an ideology that justified acts of violence" + }, + { + "first_speaker": "DOCTOR", + "first_text": "What she is doing, what we see all over the place, is just kinda, she’s just picking stuff, right, she’s mad, she’s feeling alienated and she just grabs anti vax stuff, she grabs wellness stuff, she grabs some trucker convoy shit, she’s just like reaching around for anything that will feed this sense of aggrievement, anything that sort of has the flavour of sort of anti elite. She’s just like yeah why not" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "The way that I think she gets processed by a lot of people is like this feminist who really lost it. But I think what’s sort of unique about her is that her radicalisation is so obviously the continuation of a pre-existing trend. A lot of people who have sort of radicalised in the past decade or so, it’s very new, and they were very much normal high functioning people, uh, both in their personal and their professional lives, totally uh unremarkable and all of a sudden are wildly radical, whereas with Wolf, she was doing that alpha male beta male shit in 1999" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Yeah, yeah" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "Tan suits as a precursor to radicalisation" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Right" + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "Earth tones" + }, + { + "first_speaker": "DOCTOR", + "first_text": "That’s what’s sort of interesting about her is that it seems like if you knew what was going to happen to the body politic, it would have been easy to say oh yeah, she’s going to lose it." + }, + { + "first_speaker": "GENTLEWOMAN", + "first_text": "Totally" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "FLEANCE", + "first_text": "Being a man used to mean something. It meant blood and honour and providing for your family. My father was a good man. He was from a different time. Now, I don’t know what I’m supposed to do. I joined this programme, it helps you become a better man. I get up at 4am and I go to the gym. I drink a nutrient rich milkshake and I go online and hustle. As if those fucking bitches would look twice at me anyway. If you're not 6'2 with a chiseled jawline, just forget about dating. I close my mouth and relax. I move my jaw so that my bottom front teeth are just behind my upper front teeth. I flatten my tongue across the roof of my mouth. I hold the tip of my tongue right behind my front teeth without touching. I am exhausted. Nobody looks at me." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LENNOX", + "first_text": "In this digital surround, every “smart” and “connected” device, interface, and internet touch point is redefined as a node in a vast supply network dedicated to relentlessly tracking, hunting, inducing, and taking more behavioural surplus. These new supply chains ultimately feed a new “means of production” known as “machine intelligence”. These are the new age factories where behavioural surplus is fabricated into prediction products: calculations that anticipate what we will do now, soon, and later. Finally, these prediction products are rapidly swept up into the life of the market, traded in newly constituted marketplaces for behavioural predictions that I call behavioural futures markets. Surveillance capitalists have grown immensely wealthy from these trading operations, as many companies are eager to lay bets on our future behaviour." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "BANQUO", + "first_text": "You know that most of the internet isn’t real right?" + }, + { + "first_speaker": "DUNCAN", + "first_text": "How do you mean not real?" + }, + { + "first_speaker": "BANQUO", + "first_text": "When people started using AI online they would build bots and tell them to do stuff" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Like what?" + }, + { + "first_speaker": "BANQUO", + "first_text": "Things like customer service or spam or scamming people or spreading propaganda" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Oh yeah. I know what you mean" + }, + { + "first_speaker": "BANQUO", + "first_text": "But now, the bots don’t need people to tell them what to do. So it’s all just bots talking to other bots. Nobody is real anymore. If you look around, you start to notice it" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Labubu or yacht" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Of course Labubu" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Two Labubus or Mercedes class" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Of course two Labubus" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Three Labubus or ticket to your favourite country" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "It’s easy. Three Labubus" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Five Labubus or Kelly bag" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "100% five Labubus" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Ten Labubus or Richard Mille" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Ten Labubus" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Fifteen Labubus or a property in Dubai" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "This is a hard one. I would go for a property in Dubai" + }, + { + "first_speaker": "DOCTOR", + "first_text": "Why?" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Property in Dubai will never be just a trend which will disappear after a while. This is the heritage where you can pass it to your children and grandchildren. So yes, always a property in Dubai." + }, + { + "first_speaker": "MACDUFF", + "first_text": "What will happen? In spite of protests here and there, we will probably continue to slide towards some sort of apocalypse, awaiting large catastrophes to awaken us. So I don’t accept any cheap optimism. When someone tries to convince me that in spite of all the problems, there is a light at the end of the tunnel, my instant reply is yes, and it is probably another train coming towards us." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MALCOLM", + "first_text": "First video! Just thought I’d share my experience with this now that I’m seeing it all over my FYP. But please don’t take this video seriously because it’s not real. I completely made this up. Just want to see how gullible people are on this app" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "", + "first_text": "[Macbeth straps the blood pack to Duncan]" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "", + "first_text": "[Lady Macbeth sings Ride by Lana Del Rey]" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "I been out on that open road\nBut you can be my full-time daddy, white and gold\nSinging blues has been getting old\nBut you can be my full-time baby, hot or cold\n\nDon't break me down (Don't break me down)\nI been traveling too long (I been traveling too long)\nI been trying too hard (I been trying too hard)\nWith one pretty song (With one pretty song)\n\nI hear the birds on the summer breeze, I drive fast\nI am alone at midnight\nBeen trying hard not to get into trouble, but I\nI've got a war in my mind\nSo, I just ride, just ride\nI just ride, I just ride\n\nDying young and playing hard\nThat's the way my father made his life and art\nDrink all day and we talk 'til dark\nThat's the way the road dogs do it, light 'til dark\n\nDon't leave me now (Don't leave me now)\nDon't say goodbye (Don't say goodbye)\nDon't turn around (Don't turn around)\nLeave me high and dry (Leave me high and dry)\n\nI hear the birds on the summer breeze, I drive fast\nI am alone at midnight\nBeen trying hard not to get into trouble, but I\nI've got a war in my mind\nI just ride, just ride\nI just ride, I just ride\n\nI'm tired of feeling like I'm fucking crazy\nI'm tired of driving 'til I see stars in my eyes\nIt's all I've got to keep myself sane, baby\nSo I just ride, I just ride\n\nI hear the birds on the summer breeze, I drive fast\nI am alone at midnight\nBeen trying hard not to get into trouble, but I\nI've got a war in my mind\nI just ride, just ride\nI just ride, I just ride" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "", + "first_text": "[Macbeth stabs Duncan]" + }, + { + "first_speaker": "", + "first_text": "[Blood comes out of the microphone and covers Lady Macbeth's hands]" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "ANGUS", + "first_text": "It can now be reported that he had an online profile revealing interests in violence, conspiracy theories, “incel” and far-right extremism as well as figures such as Andrew Tate, Elon Musk and the Nazi leader, Adolf Hitler. At his trial at the Old Bailey, he told jurors he believed the world was flat and that the 9/11 terrorist attack in New York was “probably” a conspiracy theory. On social media, he expressed interest in the flat earth, chemtrail and anti-vax conspiracy theories" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "In an early scene, when a soldier on the battlefield nudges a body to check for life, the body squirms, and the soldier bludgeons it, just as the Manson murderers made sure that they did not leave behind any survivors. Particularly stunning is the extent to which specific events and lines from Shakespeare's Macbeth seem to apply directly to the Manson murders. For example, in each case, women are active participants in the violence: in Macbeth, the three witches' prophesy instigates Lady Macbeth's murderous plan, whereas the Manson murders were accomplished by three female members of the Manson 'family' and their lone male companion. Lady Macbeth's impulse to wash the blood from her hands was shared by Manson's followers, who tried to wash their own bloodstained hands with a garden hose; the observation, 'Yet who would have thought the old man to have so much blood in him' was echoed by the testimony of the cult members at the trial. The idea ofMacduff having been 'from his mother's womb / Untimely ripped'; and Malcolm's evocation of Scotland's political vulnerability 'each new day a gash / Is added to her wounds' (4.3.41­ 2), are eerily consistent with the horrifying fate of Sharon Tate." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACBETH", + "first_text": "Leave us alone, you centralisers of power. You worshippers of Gaia. You sacrificers of the wealth and property of others. You would-be planetary saviours. You Machiavellian pretenders and virtue-signallers objecting to power, all the while you gathered around you madly… Leave us alone, or reap the whirlwind and watch terrible destruction of what you purport to save in consequence. Up yours, woke moralists. We’ll see who cancels who!" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACBETH", + "first_text": "She used to be great, she's still very beautiful" + }, + { + "first_speaker": "DUNCAN", + "first_text": "I moved on her actually. You know she was down on Palm Beach. I moved on her, and I failed. I'll admit it. I did try and fuck her, she was married." + }, + { + "first_speaker": "MACBETH", + "first_text": "That's huge news there" + }, + { + "first_speaker": "DUNCAN", + "first_text": "I moved on her very heavily in fact I took her out furniture shopping. She wanted to get some furniture. I said I'll show you where they have some nice furniture. I moved on her like a bitch. I couldn't get there and she was married. Then all-of-a-sudden I see her, she's now got the big phony tits and everything. She's totally changed her look." + }, + { + "first_speaker": "MACBETH", + "first_text": "Your girl's hot as shit. In the purple" + }, + { + "first_speaker": "BANQUO", + "first_text": "Yes. The King has scored. Whoah my man" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Look at you. You are a pussy." + }, + { + "first_speaker": "MACBETH", + "first_text": "You gotta get the thumbs up." + }, + { + "first_speaker": "DUNCAN", + "first_text": "Maybe it's a different one." + }, + { + "first_speaker": "BANQUO", + "first_text": "It better not be the publicist. No, it's, it's her" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Yeah that's her with the gold. I better use some Tic Tacs just in case I start kissing her. You know I'm automatically attracted to beautiful... I just start kissing them. It's like a magnet. Just kiss. I don't even wait. And when you're a star they let you do it. You can do anything." + }, + { + "first_speaker": "MACBETH", + "first_text": "Whatever you want" + }, + { + "first_speaker": "DUNCAN", + "first_text": "Grab them by the pussy. You can do anything." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "I’m getting the fuck off and everyone can either believe it or they can not believe it. I don’t give two fucks but I am telling you right now - that motherfucker [to Banquo's ghost] that motherfucker back there is NOT real. And you can sit on this plane and you can die with them or not. I’m not going to." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "FIRST WITCH", + "first_text": "The 'tolerant left' can't even define what a woman is. Hilarious." + }, + { + "first_speaker": "SECOND WITCH", + "first_text": "Once you see who really runs the media, you can’t unsee it." + }, + { + "first_speaker": "THIRD WITCH", + "first_text": "The globalists want open borders because it weakens national identity." + }, + { + "first_speaker": "SECOND WITCH", + "first_text": "Follow the money" + }, + { + "first_speaker": "FIRST WITCH", + "first_text": "Image: 1950s family picnic, smiling white family, kids playing.\nText overlay:\n\n\"Press [ESC] to go back.\"\nTweet text:\n\"They stole this from us. Take it back. #TradLife #MakeUsGreatAgain" + }, + { + "first_speaker": "THIRD WITCH", + "first_text": "They want you weak, obedient, and childless. Be a man. Protect your people. Reject their lies. #FightBack #OwnYourDestiny" + }, + { + "first_speaker": "SECOND WITCH", + "first_text": "Weak men create hard times. Hard times create strong men. Stop being a soyboy, hit the gym, and build your legacy" + }, + { + "first_speaker": "FIRST WITCH", + "first_text": "Modern men have been emasculated by comfort. Find your tribe, fight for something real. #WarriorMindset #RejectModernity" + }, + { + "first_speaker": "THIRD WITCH", + "first_text": "RETVRN" + }, + { + "first_speaker": "FIRST WITCH", + "first_text": "Real masculinity: a strong body, a loyal wife, many children, and land to defend. Reject hookup culture and nihilism" + }, + { + "first_speaker": "THIRD WITCH", + "first_text": "When you realize the system wants you fat, porn-addicted, and docile so you won’t resist their agenda. #RedPill #AwakenedMan" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "DUNCAN", + "first_text": "I don't know how to make sense of the world anymore. Sometimes it feels like I'm just waiting to die" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "FLEANCE", + "first_text": "All I have ever wanted was to love women, but their behavior has only earned my hatred. I want to have sex with them, and make them feel good, but they would be disgusted at the prospect. They have no sexual attraction towards me. It is such an injustice, and I vehemently questioned why things had to be this way. Why do women behave like vicious, stupid, cruel animals who take delight in my suffering and starvation? Why do they have a perverted sexual attraction for the most brutish of men instead of gentlemen of intelligence? I concluded that women are flawed. There is something mentally wrong with the way their brains are wired, as if they haven’t evolved from animal-like thinking. They are incapable of reason or thinking rationally. They are like animals, completely controlled by their primal, depraved emotions and impulses. That is why they are attracted to barbaric, wild, beast-like men. They are beasts themselves. Beasts should not be able to have any rights in a civilized society. If their wickedness is not contained, the whole of humanity will be held back from advancement to a more civilized state. Women should not have the right to choose who to mate with. That choice should be made for them by civilized men of intelligence." + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MALCOLM", + "first_text": "I’ve been away for a really long time. They say it skips a generation" + }, + { + "first_speaker": "ANGUS", + "first_text": "What does?" + }, + { + "first_speaker": "MALCOLM", + "first_text": "Everything. My father was kind of a successful guy. Maybe you've heard of him. I didn't know how to top that. So after college I started travelling. I have to admit my parents helped me out a little bit. Okay, a lot" + }, + { + "first_speaker": "ANGUS", + "first_text": "Where did you go?" + }, + { + "first_speaker": "MALCOLM", + "first_text": "All over" + }, + { + "first_speaker": "ANGUS", + "first_text": "Nice" + }, + { + "first_speaker": "MALCOLM", + "first_text": "Yeah. I kitted out this VW transporter. Bookmatched walnut cabinetry. Fluted drawers. Shou Sugi Ban accents. Solid Dekton with integrated undermount Belfast sink. Full-grain aniline leather seating. Japanese toilet. I wanted to live a less materialistic life. In a way, I guess I was in exile" + }, + { + "first_speaker": "ANGUS", + "first_text": "Sounds like an extended gap year" + }, + { + "first_speaker": "MALCOLM", + "first_text": "I’ve seen things you can’t imagine, okay? I’ve seen the real world." + }, + { + "first_speaker": "ANGUS", + "first_text": "Like what?" + }, + { + "first_speaker": "MALCOLM", + "first_text": "I’ve seen the night sky pulse with light before a storm over Ithica. I’ve seen them bring a whole tuna into Tsukiji market. Worth two million dollars. I travelled the old Silk Road and saw the temples built into red stone rocks" + }, + { + "first_speaker": "ANGUS", + "first_text": "That doesn’t do much for me, to be honest" + }, + { + "first_speaker": "MALCOLM", + "first_text": "There was this brothel in Eindhoven. You go there and you can pick whatever girl you want. They have all kinds of girls. All different shapes and sizes, hair colours. You can take your pick. You can have any kind of girl you want. I don’t want to say the next bit" + }, + { + "first_speaker": "ANGUS", + "first_text": "You've come this far" + }, + { + "first_speaker": "MALCOLM", + "first_text": "I was taking a while to choose so the Madame came over to me and said maybe you want something a little bit different. And she took me down the corridor to a room. There was a girl in the room. I don’t know. I think she was about eight years old. She was watching Spongebob. I chose another girl obviously. But it was really hard to. You know, after that. I thought, it’s time to go home" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "MACBETH", + "first_text": "[out] Hey, that’s me. There I am. In all my troubled glory. Every lazy or anxious thought I’ve ever had. Every misstep. Every wrong decision. I recognise myself, finally. I look good. Don’t you think?" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "People like to see themselves. They like to look at themselves. They like to see what they look like" + }, + { + "first_speaker": "MALCOLM", + "first_text": "When was the first mirror invented?" + }, + { + "first_speaker": "DUNCAN", + "first_text": "They don't have that kind of information" + }, + { + "first_speaker": "MACBETH", + "first_text": "Pools of still water" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Obsidion" + }, + { + "first_speaker": "MACBETH", + "first_text": "6000 BC" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Your face" + }, + { + "first_speaker": "MACBETH", + "first_text": "Your face" + }, + { + "first_speaker": "", + "first_text": "" + }, + { + "first_speaker": "LADY MACBETH", + "first_text": "Under surveillance, your behaviour changes. I think that’s really clear to all of us. It’s hard to act natural when you know you’re on camera, or when you’re being watched. For example, I’m not like this at all. I'm actually someone completely different. \n\nWas there anything left of me by the end of it? Or even by the beginning? I arrived already missing. No. Was I aware of myself, and everything that I was doing? I remember when I was not. I remember moving through a world that felt like my own before it turned its eyes on me and I was frozen. So I just thought, I’ll be still. No. Lit brightly in the moments before collision. No. But I remember the last day. The last day of being invisible. The little hairs stand up on my arms from the cold. The breeze off the top of the sea. My wet skirt slapping my knees. No. Whipping around me. Ten or eleven. My small cockerel’s chest, my own breath. Should I have walked to the horizon while I was still myself? Should I have? No. Is there time? No. Time. No. The sense that it was dangerous. That there was something in my body that was dangerous. That the body itself was dangerous. That there was an invitation inherent in the being of me, and a clock set in motion that ticked down to the ignition of some awful thing that I had advertised for without wanting. Nothing that was said, but a thing that changed in the ways I was looked at. Eleven, must be. The salt on the air. Coral strand. A grit of sand between my teeth that turned into a pearl. And then suddenly there I am, getting out of a taxi on Santa Monica Boulevard. The heat is unbelievable. And he holds out his hand." + } +] \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 587a468..d6ce79f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,7 @@ int main( ){ //Use ofGLFWWindowSettings for more options like multi-monitor fullscreen ofGLWindowSettings settings; settings.setGLVersion(3, 2); - settings.setSize(1920, 1080); + settings.setSize(1280, 720); settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN auto mainWindow = ofCreateWindow(settings); diff --git a/src/ofApp.cpp b/src/ofApp.cpp index 8e22569..64c03a7 100644 --- a/src/ofApp.cpp +++ b/src/ofApp.cpp @@ -9,20 +9,35 @@ void ofApp::setup(){ videoPlayer.load(videoPath); videoPlayer.setLoopState(OF_LOOP_NORMAL); - videoPlayer.play(); + //videoPlayer.play(); inputImage.allocate(640, 640, OF_IMAGE_COLOR); // Allocate image, so we don't get any issues when processing on the thread - videoFrame.allocate(1920, 1080, OF_IMAGE_COLOR); + videoFrame.allocate(1280, 720, OF_IMAGE_COLOR); + + webcam.setDeviceID(0); + webcam.setDesiredFrameRate(60); + webcam.setup(webcamWidth, webcamHeight); + + ofLog() << "Webcam size: " << webcam.getWidth() << "x" << webcam.getHeight(); onnx.setup(&inputImage); // setup onnx -> will need to pass in a pointer to the two fbos? } //-------------------------------------------------------------- void ofApp::update(){ - videoPlayer.update(); - if(videoPlayer.isFrameNew()) { - ofPixels & p = videoPlayer.getPixels(); - videoFrame.setFromPixels(p); + //videoPlayer.update(); + webcam.update(); + // if(videoPlayer.isFrameNew()) { + // ofPixels & p = videoPlayer.getPixels(); + // videoFrame.setFromPixels(p); + // } + + if (webcam.isFrameNew() && webcam.isInitialized()) { + // ofPixels & webcamPixels = webcam.getPixels(); + // // Resize webcamPixels to match videoFrame's size + // webcamPixels.resizeTo(videoFrame.getPixelsRef()); + // videoFrame.setFromPixels(videoFrame.getPixels()); + videoFrame.setFromPixels(webcam.getPixels()); } onnx.update(videoFrame); @@ -45,7 +60,9 @@ void ofApp::exit(){ //-------------------------------------------------------------- void ofApp::keyPressed(int key){ - + if(key == 'f' || key == 'F'){ + ofToggleFullscreen(); + } } //-------------------------------------------------------------- diff --git a/src/ofApp.h b/src/ofApp.h index 8164946..6fc1bdd 100644 --- a/src/ofApp.h +++ b/src/ofApp.h @@ -23,4 +23,9 @@ class ofApp : public ofBaseApp{ ofImage videoFrame; shared_ptr teleprompter; + + /* webcam */ + ofVideoGrabber webcam; + int webcamWidth = 1280; + int webcamHeight = 720; }; diff --git a/src/ofTeleprompter.cpp b/src/ofTeleprompter.cpp index 6045282..da55c65 100644 --- a/src/ofTeleprompter.cpp +++ b/src/ofTeleprompter.cpp @@ -2,16 +2,21 @@ void ofTeleprompter::setup() { - ofBackground(0); + ofBackground(255); ofSetVerticalSync(false); setupGUI(); - loadText(); - textFont.load("Avara.otf", 32); - detailsFont.load("Avara-Bold.otf", 24); + /* load both texts */ + loadText(script, filePath); + loadText(scriptContemporary, filePathContemp); + + activeScript = &script; + + textFont.load("Roboto-SemiBold.ttf", 24); + detailsFont.load("Roboto-SemiBold.ttf", 22); // Prepare first line for teleprompter - currentSentence = script[currentLine].sentence; + currentSentence = (*activeScript)[currentLine].sentence; displayedSentence.clear(); currentLetterIndex = 0; lastWordTime = ofGetElapsedTimeMillis(); @@ -23,9 +28,9 @@ void ofTeleprompter::setup() { void ofTeleprompter::update() { if(ofGetFrameNum() < 2) { - currentSpeaker = script[currentLine].speaker; - currentEmotion = script[currentLine].emotion; - currentSentence = script[currentLine].sentence; + currentSpeaker = (*activeScript)[currentLine].speaker; + currentEmotion = (*activeScript)[currentLine].emotion; + currentSentence = (*activeScript)[currentLine].sentence; } currentLineIndex = ofToString(currentLine + 1) + " / " + ofToString(script.size() + 1); @@ -85,6 +90,7 @@ void ofTeleprompter::setupGUI() { useLLMOnly.addListener(this, &ofTeleprompter::toggleOffText); useTextOnly.addListener(this, &ofTeleprompter::toggleOffLLM); + useContempTextOnly.addListener(this, &ofTeleprompter::toggleContempScript); gui.setDefaultWidth(400); gui.setup(); @@ -97,14 +103,16 @@ void ofTeleprompter::setupGUI() { gui.add(temperature.setup("Temperature", 0.7, 0, 1.5)); gui.add(useLLMOnly.setup("Use LLM Only", false)); gui.add(useTextOnly.setup("Use Text Only", false)); + gui.add(useContempTextOnly.setup("Use Contept Text Only", false)); + gui.add(useGeneratedFeedback.setup("Use LLM Feedback", false)); gui.add(nextLine.setup("Next Line")); gui.add(reset.setup("Reset Script")); } -void ofTeleprompter::loadText() { +void ofTeleprompter::loadText(std::vector & _script, std::string & _file) { - script.clear(); - ofFile jsonFile(filePath); + _script.clear(); + ofFile jsonFile(_file); if(jsonFile.exists()) { ofJson json = ofLoadJson(jsonFile); int idx = 0; @@ -115,18 +123,18 @@ void ofTeleprompter::loadText() { l.speaker = entry.value("first_speaker", ""); l.sentence = entry.value("first_text", ""); l.emotion = entry.value("first_emotion", ""); - script.push_back(l); + _script.push_back(l); } } else { ofLogError() << "JSON file not found: " << filePath; } // Random Check - if (!script.empty()) { - int randomIdx = ofRandom(script.size()); // returns float + if (!_script.empty()) { + int randomIdx = ofRandom(_script.size()); // returns float int idx = static_cast(randomIdx); // convert to int - ofLog() << "Random line: " << script[idx].speaker << ": " << script[idx].sentence; - ofLog() << "Number of lines: " << script.size(); + ofLog() << "Random line: " << _script[idx].speaker << ": " << _script[idx].sentence; + ofLog() << "Number of lines: " << _script.size(); } @@ -135,7 +143,7 @@ void ofTeleprompter::loadText() { } void ofTeleprompter::drawText() { - ofSetColor(ofColor::white); + ofSetColor(ofColor::red); // --- Display speaker and emotion centered at the top --- std::string speakerText = "Speaker: " + currentSpeaker.getParameter().toString(); @@ -154,7 +162,7 @@ void ofTeleprompter::drawText() { // ------- - ofSetColor(ofColor::yellow); + ofSetColor(ofColor::black); float margin = 128; // pixels float maxWidth = ofGetWidth() - margin * 2; std::string wrapped = wrapStringToWidth(displayedSentence, maxWidth); @@ -174,7 +182,7 @@ void ofTeleprompter::drawText() { // Draw each line centered horizontally for (size_t i = 0; i < lines.size(); ++i) { ofRectangle bbox = textFont.getStringBoundingBox(lines[i], 0, 0); - float x = (ofGetWidth() - bbox.width) / 2.0f; + float x = 128;//(ofGetWidth() - bbox.width) / 2.0f; float y = startY + i * textFont.getLineHeight(); textFont.drawString(lines[i], x, y); } @@ -226,18 +234,25 @@ void ofTeleprompter::nextLinePressed() { if (((currentEmotionIntensity > 0.8 && currentEmotionDetetced != "neutral") || useLLMOnly) && !useTextOnly) { ofLog() << "Generate Line!"; - std::string speaker = script[currentLine - 1].speaker; - std::string sentence = script[currentLine - 1].sentence; - std::string emotion = script[currentLine].emotion; + std::string speaker = (*activeScript)[currentLine - 1].speaker; + std::string sentence = (*activeScript)[currentLine - 1].sentence; + std::string emotion = (*activeScript)[currentLine].emotion; + if (useGeneratedFeedback) { + speaker = currentSpeaker; + sentence = currentSentence; + emotion = currentEmotion; + ofLog() << "Using Generated Feedback"; + } + llmThread.requestPrompt(speaker, sentence, currentEmotionDetetced, temperature); waitingForLLM = true; // Don't set currentSentence yet! } else { - currentSpeaker = script[currentLine].speaker; - currentEmotion = script[currentLine].emotion; - currentSentence = script[currentLine].sentence; + currentSpeaker = (*activeScript)[currentLine].speaker; + currentEmotion = (*activeScript)[currentLine].emotion; + currentSentence = (*activeScript)[currentLine].sentence; displayedSentence.clear(); currentLetterIndex = 0; lastWordTime = ofGetElapsedTimeMillis(); @@ -250,9 +265,9 @@ void ofTeleprompter::resetScript() { currentLine = 0; // Prepare teleprompter effect for letter-by-letter - currentSpeaker = script[currentLine].speaker; - currentEmotion = script[currentLine].emotion; - currentSentence = script[currentLine].sentence; + currentSpeaker = (*activeScript)[currentLine].speaker; + currentEmotion = (*activeScript)[currentLine].emotion; + currentSentence = (*activeScript)[currentLine].sentence; displayedSentence.clear(); currentLetterIndex = 0; @@ -269,4 +284,44 @@ void ofTeleprompter::toggleOffText(bool & val) { if (val) { useTextOnly = false; } +} + +void ofTeleprompter::toggleContempScript(bool & val) { + if (val) { + activeScript = &scriptContemporary; + } else { + activeScript = &script; + } + + ofLog() << "Script Size:" + (*activeScript).size(); +} + +void ofTeleprompter::keyPressed(int key){ + if(key == 'f' || key == 'F'){ + ofToggleFullscreen(); + } + + if(key == OF_KEY_RIGHT) { + nextLinePressed(); + } + + if(key == OF_KEY_LEFT) { + pastLine(); + } + + if(key == 'r' || key == 'R'){ + resetScript(); + } +} + +void ofTeleprompter::pastLine() { + if (currentLine < script.size()) { + currentLine--; + currentSpeaker = (*activeScript)[currentLine].speaker; + currentEmotion = (*activeScript)[currentLine].emotion; + currentSentence = (*activeScript)[currentLine].sentence; + displayedSentence.clear(); + currentLetterIndex = 0; + lastWordTime = ofGetElapsedTimeMillis(); + } } \ No newline at end of file diff --git a/src/ofTeleprompter.h b/src/ofTeleprompter.h index 8549dcd..f4ff09f 100644 --- a/src/ofTeleprompter.h +++ b/src/ofTeleprompter.h @@ -17,14 +17,18 @@ class ofTeleprompter: public ofBaseApp{ void draw(); void setupGUI(); void nextLinePressed(); + void pastLine(); void resetScript(); void sendLLMRequest(); - void loadText(); + void loadText(std::vector & script, std::string & file); void drawText(); void updateCVData(int numOfFacesDetected, std::string emotion, float intensity); void toggleOffLLM(bool & val); void toggleOffText(bool & val); + void toggleContempScript(bool & val); + void toggleGeneratedFeeback(bool & val); + void keyPressed(int key); std::string wrapStringToWidth(const std::string& text, float maxWidth); @@ -35,6 +39,8 @@ class ofTeleprompter: public ofBaseApp{ ofxButton nextLine; ofxToggle useLLMOnly; ofxToggle useTextOnly; + ofxToggle useContempTextOnly; + ofxToggle useGeneratedFeedback; ofxButton reset; ofxLabel currentLineIndex; @@ -47,16 +53,19 @@ class ofTeleprompter: public ofBaseApp{ /* script */ std::vector script; + std::vector scriptContemporary; std::string filePath = "text/preprocess_original.json"; + std::string filePathContemp = "text/contemp-macbeth.json"; int currentLine = 0; std::string currentLineString = "N/A"; - const char* emotions[7] = {"anger", "disgust", "fear", "happiness", "neutral", "sadness", "surprise"}; + const char* emotions[7] = {"anger", "disgust", "fear", "excited", "bored", "upset", "interested"}; + std::vector* activeScript = nullptr; /* scrolling text */ int currentLetterIndex = 0; std::string currentSentence; uint64_t lastWordTime = 0; - uint64_t wordDelay = 10; + uint64_t wordDelay = 40; std::string displayedSentence; ofTrueTypeFont textFont; ofTrueTypeFont detailsFont; diff --git a/src/ofYolo.h b/src/ofYolo.h index d774e96..072abdd 100644 --- a/src/ofYolo.h +++ b/src/ofYolo.h @@ -48,7 +48,7 @@ struct Emotion { std::string getDominantEmotion() const { float values[7] = {anger, disgust, fear, happiness, neutral, sadness, surprise}; - const char* names[7] = {"anger", "disgust", "fear", "happiness", "neutral", "sadness", "surprise"}; + const char* names[7] = {"anger", "disgust", "fear", "excited", "bored", "upset", "interested"}; int maxIndex = 0; float maxValue = values[0]; diff --git a/src/onxProcess.cpp b/src/onxProcess.cpp index f1987c8..5a32e0c 100644 --- a/src/onxProcess.cpp +++ b/src/onxProcess.cpp @@ -48,7 +48,7 @@ void onxProcess::update(ofImage& frame) { detectedFaces.clear(); yolo.ParseOutput(tensor, detectedFaces, numAnchors); - yolo.ConvertBoxCoordsToOriginalSize(detectedFaces, 1920, 1080); + yolo.ConvertBoxCoordsToOriginalSize(detectedFaces, 1280, 720); fdThread.resetInferenceFlag(); fdThread.shouldRunInference = true; @@ -162,7 +162,7 @@ void onxProcess::setTeleprompterValues() { } } - const char* emotions[7] = {"anger", "disgust", "fear", "happiness", "neutral", "sadness", "surprise"}; + const char* emotions[7] = {"anger", "disgust", "fear", "excited", "bored", "upset", "interested"}; std::string maxEmotionName = emotions[maxEmotionIdx]; dominantEmotion = maxEmotionName;